Solved

I should have efficient Collections method

Posted on 2004-08-26
23
261 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
  • 13
  • 6
  • 3
  • +1
23 Comments
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
>>it is not giving correct sets

What do you mean ? ;-)
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
Comment Utility
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
Comment Utility
my code gives three sets  where as your's give 2 sets

thanks
sudhakar
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
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
Comment Utility
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
Comment Utility
the key should be protocol+host+user
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
>>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
Comment Utility
this should be protocol+host+user final key for me
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
Comment Utility
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
Comment Utility
> 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
Comment Utility
>> 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
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 
LVL 92

Expert Comment

by:objects
Comment Utility
> 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
Comment Utility
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
Comment Utility
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
Comment Utility
>>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
Comment Utility
sure
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
Comment Utility
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
Comment Utility
The reason is I have already asked the CS people to reopen the previous question

0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
Can you remind me which one it was? - i'm losing track ;-)
0
 
LVL 14

Author Comment

by:sudhakar_koundinya
Comment Utility
0
 
LVL 86

Expert Comment

by:CEHJ
Comment Utility
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
Comment Utility
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
Comment Utility
Hello objects, are you there??
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
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…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

771 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now