Solved

I should have efficient Collections method

Posted on 2004-08-26
23
299 Views
Last Modified: 2010-03-31
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
0
Comment
Question by:sudhakar_koundinya
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 13
  • 6
  • 3
  • +1
23 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 11901189
>>it is not giving correct sets

What do you mean ? ;-)
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11901396
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11901400
my code gives three sets  where as your's give 2 sets

thanks
sudhakar
0
What Is Transaction Monitoring and who needs it?

Synthetic Transaction Monitoring that you need for the day to day, which ensures your business website keeps running optimally, and that there is no downtime to impact your customer experience.

 
LVL 86

Expert Comment

by:CEHJ
ID: 11901431
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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11901635
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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11901653
the key should be protocol+host+user
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 11901664
>>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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11901675
this should be protocol+host+user final key for me
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11906608
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
 
LVL 92

Expert Comment

by:objects
ID: 11907362
> 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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11907715
>> 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
 
LVL 92

Expert Comment

by:objects
ID: 11907741
> 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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11907791
OK,

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

Thanks
Sudhakar
0
 
LVL 92

Expert Comment

by:objects
ID: 11907836
you can probably delete this one, and ask a new 20 point q linking to the reopened question.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 11910865
>>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
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11910871
sure
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11910880
But plz post that in previous link. So that objects also will participate in that thread

Thanks
Sudhakar
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11910893
The reason is I have already asked the CS people to reopen the previous question

0
 
LVL 86

Expert Comment

by:CEHJ
ID: 11910896
Can you remind me which one it was? - i'm losing track ;-)
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 11913414
Also, could you post a link to some of the most representative data? - it will help with testing ;-)
0
 

Accepted Solution

by:
CetusMOD earned 0 total points
ID: 11915013
Closed, 250 points refunded per request http:Q_21109008.html

Please all continue at http:Q_21102101.html 

CetusMOD
Community Support Moderator
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
ID: 11922492
Hello objects, are you there??
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question