I should have efficient Collections method

This is my method

 private java.util.List[] getURLList(java.util.List list) {
    Hashtable ht = new Hashtable();
    for (int i = 0; i < list.size(); i++) {
      String url = list.get(i).toString();
      String array[] = url.split("/");

      String domain = array[0];
      if (array[0].toLowerCase().startsWith("http")) {
        domain = array[2];
        domain = domain + array[4];
      }
      else {
        domain = domain + array[2];
      }

      ArrayList sublist = (ArrayList) ht.get(domain);
      if (sublist == null) {
        sublist = new ArrayList();
      }
      sublist.add(url);
      ht.put(domain, sublist);
    }
    return (List[]) Collections.list(ht.elements()).toArray(new ArrayList[0]);
  }







from : http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21102101.html (Answered by CEHJ)
private static java.util.List[] getUrlList(java.util.List list) {
          Hashtable hostToUrls = new Hashtable();
          try {
               for (int i = 0; i < list.size(); i++) {
                    URL url = new URL((String) list.get(i));
                    String hostKey = url.getHost();
                         String protocol=url.getProtocol();
                    //     System.err.println(url.getProtocol() );
                    // Could be a Set if no duplicates required
                    ArrayList urlsForHost = (ArrayList)hostToUrls.get(protocol+hostKey);
                    if (urlsForHost == null) {
                         urlsForHost = new ArrayList();
                         urlsForHost.add(url);
                         hostToUrls.put(protocol+hostKey, urlsForHost);
                    }
                    else {
                         urlsForHost.add(url);
                    }
               }
          }
          catch (MalformedURLException e) {
               return null;
          }
          int numberOfLists = hostToUrls.size();
          return (java.util.List[]) Collections.list(hostToUrls.elements()).toArray(new ArrayList[numberOfLists]);
     }




Hello all,

This question was asked already by me. But I am looking at much more efficient method. The reason is although CEHJ's method is efficient, it is not giving correct sets. Actually my method gives the correct sets. But it is less efficient method than CEHJ's

So I need the correct results and should increase the performance of method than CEHJ's and my method.


for your testing,

Here is the test sample
http://www.geocities.com/sudhakar_koundinya/testsample.html (If u place the problem - copy the URL in location bar and press enter. Then it works :-D )

Actually what I am thinking is

return (List[]) Collections.list(ht.elements()).toArray(new ArrayList[0]); this line is giving poor performance results.

Any ideas are welcome from you guys

thank you
Sudhakar
LVL 14
sudhakar_koundinyaAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
CetusMODConnect With a Mentor Commented:
Closed, 250 points refunded per request http:Q_21109008.html

Please all continue at http:Q_21102101.html 

CetusMOD
Community Support Moderator
0
 
CEHJCommented:
>>it is not giving correct sets

What do you mean ? ;-)
0
 
sudhakar_koundinyaAuthor Commented:
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
sudhakar_koundinyaAuthor Commented:
my code gives three sets  where as your's give 2 sets

thanks
sudhakar
0
 
CEHJCommented:
Well yours looks wrong to me ;-) Or at least it's not working in the way i thought the algo was meant to work:

>>
List :0
http://192.12.0.38/exchange/vijay/Inbox/testattachment.EML
List :1
http://192.12.0.38/exchange/Administrator/Deleted Items/TEST Message 0056.EML
>>

AFAIK the unique key is host+protocol (or vice versa). Why then does the same host and protocol in your version (above) appear in different lists?
0
 
sudhakar_koundinyaAuthor Commented:
CEHJ,

keys should be


http://192.12.0.38/exchange/vijay
http://192.12.0.38/exchange/Administrator

some thing like this where as

using ur code, we just have protocol and host

thanks,
sudhakar
0
 
sudhakar_koundinyaAuthor Commented:
the key should be protocol+host+user
0
 
CEHJCommented:
>>using ur code, we just have protocol and host

But that's what i thought you wanted! Where is the key meant to stop - after the second (account?) directory? And are you separating on protocol too? i.e. should


http://192.12.0.38/exchange/vijay

and

https://192.12.0.38/exchange/vijay

appear in separate lists?
0
 
sudhakar_koundinyaAuthor Commented:
this should be protocol+host+user final key for me
0
 
sudhakar_koundinyaAuthor Commented:
CEHJ,

I got an Idea how to speed the result

But just wanted to clarify one thing from you

Initially I have declared some thing like this

Object object[]=new Object[0];

Now dynamically how can we Increase the size of array with out loosing previous results. Which we can do same in c/c++

0
 
objectsCommented:
> The reason is although CEHJ's method is efficient, it is not giving correct sets.

Then why did you accept it. You should ask for that question to be reopened instead of opening a new question.
0
 
sudhakar_koundinyaAuthor Commented:
>> Then why did you accept it.

I have waited for some time for some other experts inputs. As no one participated, I thought that, I  should  close the question and then open it as new question

0
 
objectsCommented:
> I  should  close the question and then open it as new question

You shouldn't do that.
Either delete the question, and open a new one.
Or ask a new question linking to the old one.

CS can help you with it.
0
 
sudhakar_koundinyaAuthor Commented:
OK,

shall I ask the CS people to reopen that question and move this question points to that Link?

Thanks
Sudhakar
0
 
objectsCommented:
you can probably delete this one, and ask a new 20 point q linking to the reopened question.
0
 
CEHJCommented:
>>I have waited for some time for some other experts inputs

sudhakar - i haven't forgotten you. i've corrected the error but have not posted the code as i haven't optimized it yet. Do you want me to post it anyway?
0
 
sudhakar_koundinyaAuthor Commented:
sure
0
 
sudhakar_koundinyaAuthor Commented:
But plz post that in previous link. So that objects also will participate in that thread

Thanks
Sudhakar
0
 
sudhakar_koundinyaAuthor Commented:
The reason is I have already asked the CS people to reopen the previous question

0
 
CEHJCommented:
Can you remind me which one it was? - i'm losing track ;-)
0
 
CEHJCommented:
Also, could you post a link to some of the most representative data? - it will help with testing ;-)
0
 
sudhakar_koundinyaAuthor Commented:
Hello objects, are you there??
0
All Courses

From novice to tech pro — start learning today.