我可以请人验证我的 SCJP 考试收藏吗

Ala*_*Dee 0 java collections scjp

我一直在准备 SCJP,现在是 Oracle 认证专业 Java SE 程序员考试。

我很难理解所有不同的集合以及何时使用它们。我也喜欢闪存卡。因此,我尝试创建一组本质上相同的类,除了它们使用的集合之外。我必须确定输出的结果以及每个集合的主要“特征”是什么。

不幸的是我不相信自己。我希望有人确认所有信息是否准确或是否有遗漏。经过一些反馈/更正后,我认为这对于其他试图理解 Java 集合的人来说将是一个很好的练习。

涵盖的集合有:HashMap、Hashtable、TreeMap、LinkedHashMap、HashSet、TreeSet、LinkedHashSet、ArrayList、Vector、LinkedList、PriorityQueue。

我也将所有文件分开,可以在这里下载: http: //www.allgo.com/personal/MyCollections.zip

提前致谢

导入 java.util.*;
导入java.lang.*;
类 MyItem 实现 Comparable{
    私有字符串名称;
    MyItem(String n){ 名称 = n; }
    public String toString(){返回名称;}
    public String getName(){返回名称;}

    公共布尔等于(对象obj){
        if(this==obj) 返回 true;
        否则 if(obj==null) 返回 false;
        否则 if(getName() != ((MyItem)obj).getName()) 返回 false;
        否则返回真;
    }
    公共 int hashCode(){ 返回 5; }
    公共 int compareTo(MyItem b){return b.getName().compareTo(getName());}

}
公共类我的集合{
    公共静态无效主(字符串[] args){
        MyHashMap.main(args); System.out.println("HashMap: Hash=Unsorted, Unordered.Map=键/值对\n##\n");
        MyHashtable.main(args); System.out.println("哈希表:线程安全。Hash=未排序,无序。Map=键/值对\n##\n");
        MyTreeMap.main(args); System.out.println("TreeMap: Tree=已排序。Map=键/值。\n##\n");
        MyLinkedHashMap.main(args); System.out.println("LinkedHashMap: Linked=保持插入顺序。Hash=未排序,无序。Map=键/值对。\n##\n");
        MyHashSet.main(args); System.out.println("HashSet: Hash=Unsorted, Unordered.Set=Unique.Define=equals/hashCode\n##\n");
        MyTreeSet.main(args); System.out.println("TreeSet: Tree=Sorted. Set=Unique. Define=Comparable/Comparator\n##\n");
        MyLinkedHashSet.main(args); System.out.println("LinkedHashSet: Liniked=维护插入顺序。Hash=未排序。Set=Unique。Define=equals/hashCode\n##\n");
        MyArrayList.main(args); System.out.println("ArrayList: List=Queue. 保持插入顺序,允许重复\n##\n");
        MyVector.main(args); System.out.println("向量:线程安全。ArrayList。保持插入顺序,允许重复\n##\n");
        MyLinkedList.main(args); System.out.println("LinkedList: Linked=维护插入顺序。List=Queue。具有更多方法的高级ArrayList。\n##\n");
        MyPriorityQueue.main(args); System.out.println("PriorityQueue: Define=Comparable/comparator\n##\n");
    }
}
类 MyHashMap{
    公共静态无效主(字符串[] args){
        HashMap c = new HashMap();
        MyItem 八 = new MyItem("八");
        c.put(5, new MyItem("五")); c.put(1, new MyItem("One")); c.put(8, 八); c.put(3, new MyItem("三"));
        c.put(4, new MyItem("四")); c.put(1, new MyItem("1")); c.put(8, 八); c.put(9, new MyItem("九"));
        c.删除(3); c.put(7, new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyHashtable{
    公共静态无效主(字符串[] args){
        哈希表 c = new Hashtable();
        MyItem 八 = new MyItem("八");
        c.put(5, new MyItem("五")); c.put(1, new MyItem("One")); c.put(8, 八); c.put(3, new MyItem("三"));
        c.put(4, new MyItem("四")); c.put(1, new MyItem("1")); c.put(8, 八); c.put(9, new MyItem("九"));
        c.删除(3); c.put(7, new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyTreeMap{
    公共静态无效主(字符串[] args){
        TreeMap c = new TreeMap();
        MyItem 八 = new MyItem("八");
        c.put(5, new MyItem("五")); c.put(1, new MyItem("One")); c.put(8, 八); c.put(3, new MyItem("三"));
        c.put(4, new MyItem("四")); c.put(1, new MyItem("1")); c.put(8, 八); c.put(9, new MyItem("九"));
        c.删除(3); c.put(7, new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyLinkedHashMap{
    公共静态无效主(字符串[] args){
        LinkedHashMap c = new LinkedHashMap();
        MyItem 八 = new MyItem("八");
        c.put(5, new MyItem("五")); c.put(1, new MyItem("One")); c.put(8, 八); c.put(3, new MyItem("三"));
        c.put(4, new MyItem("四")); c.put(1, new MyItem("1")); c.put(8, 八); c.put(9, new MyItem("九"));
        c.删除(3); c.put(7, new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyHashSet{
    公共静态无效主(字符串[] args){
        HashSet c = new HashSet();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(3); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}

类 MyTreeSet{
    公共静态无效主(字符串[] args){
        TreeSet c = new TreeSet();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(八); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyLinkedHashSet{
    公共静态无效主(字符串[] args){
        LinkedHashSet c = new LinkedHashSet();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(3); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyArrayList{
    公共静态无效主(字符串[] args){
        ArrayList c = new ArrayList();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(3); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类我的向量{
    公共静态无效主(字符串[] args){
        向量 c = new Vector();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(3); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类 MyLinkedList{
    公共静态无效主(字符串[] args){
        LinkedList c = new LinkedList();
        MyItem 八 = new MyItem("八");
        c.add(new MyItem("五")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("三"));
        c.add(new MyItem("四")); c.add(new MyItem("One")); c.add(八); c.add(new MyItem("九"));
        c.删除(3); c.add(new MyItem("七"));
        System.out.println(c);//输出?
    }
}
类我的优先级队列{
    公共静态无效主(字符串[] args){
        PriorityQueue c = new PriorityQueue();
        MyItem 八 = new MyItem("八");
        c.offer(new MyItem("五")); c.offer(new MyItem("One")); c.offer(八); c.offer(new MyItem("三"));
        c.offer(new MyItem("四")); c.offer(new MyItem("One")); c.offer(八); c.offer(new MyItem("九"));
        System.out.println(c.peek());
        System.out.println(c.poll());
        c.offer(new MyItem("七"));
        System.out.println(c);//输出?
    }
}

Boh*_*ian 7

对于初学者,您应该重构您的代码。基本上,无论你在哪里使用“复制粘贴”,都不要这样做。

创建一个像这样的方法:

private static void fill(Collection c) {
    MyItem Eight = new MyItem("Eight");
    c.add(new MyItem("Five")); c.add(new MyItem("One")); c.add(Eight); c.add(new MyItem("Three"));
    c.add(new MyItem("Four")); c.add(new MyItem("One")); c.add(Eight); c.add(new MyItem("Nine"));
    c.remove(3); c.add(new MyItem("Seven"));
    System.out.println(c);//output?
}
Run Code Online (Sandbox Code Playgroud)

然后,不要使用您现有的方法,而是执行以下操作:

class MyVector{
    public static void main(String[] args){
        Vector c = new Vector();
        fill(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

并对您拥有的所有集合执行此操作。

接下来,对您的地图执行类似的操作:

private static void fill(Map<?,?> map) {
    MyItem Eight = new MyItem("Eight");
    map.put(5, new MyItem("Five")); map.put(1, new MyItem("One")); map.put(8, Eight); map.put(3, new MyItem("Three"));
    map.put(4, new MyItem("Four")); map.put(1, new MyItem("1")); map.put(8, Eight); map.put(9, new MyItem("Nine"));
    map.remove(3); map.put(7, new MyItem("Seven"));
    System.out.println(map);//output?
}
Run Code Online (Sandbox Code Playgroud)

你的代码将会缩小、变得可读,甚至可能有一天变得可用。