1. 程式人生 > >java集合類整理

java集合類整理

pre 大於等於 lis heads 視圖 sys logs println class

LinkedList

優點:插入刪除迅速

缺點:不適合隨機訪問

List<String> staff = new LinkedList<String>();
        staff.add("Amy");
        staff.add("Amy");
        staff.add("bob");
        staff.add("car");
        staff.remove("Amy");// 即使有重復的只只會刪掉第一個找到的

沖突

List<String> list = new LinkedList<String>();
        list.add(
"a"); list.add("b"); list.add("d"); list.add("d"); ListIterator<String> iter1 = list.listIterator(); ListIterator<String> iter2 = list.listIterator(); System.out.println(iter1.next()); iter1.remove(); iter2.next();

listIterator的實現在LinkedList->AbstractSequentialList->AbstractList中,看到繼承的類AbstractList中實現了List借口,LinkedList也實現了LinkedList接口.這樣算沖突了,有點意思

iter1.remove()刪除節點了,iter2又要訪問,肯定異常了.

ArrayList

優點:隨機訪問方便,在單線程中使用快速

缺點:插入和刪除需要浪費,線程不同步,在多線程上不適合

Vector

優點:多線程同步

HashSet

優點:可以將有重復元素的ArrayList放到HashSet消除重復?

Set<String> words = new HashSet<>();
words.add("a");
words.add("c");
words.add("d");
words.add("e");
words.add("but");
words.add("e");
Iterator<String> iterator = words.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());

}
// for (String string : words)
// {
// System.out.println(string);
// }

TreeSet:

優點:有序且過濾相等,保證不重復

package test;

import java.util.Comparator;
import java.util.SortedSet;
import java.util.TreeSet;

public class main
{
    public static class Item
    {
        public Item(int w, int h)
        {
            height = h;
            weight = w;
            // TODO Auto-generated constructor stub
        }

        public int weight;
        int height;
    }

    public static void main(String[] args)
    {
        SortedSet<Item> items = new TreeSet<Item>(new Comparator<Item>()
        {
            public int compare(Item a, Item b)
            {
                return a.height * a.weight - b.height * b.weight;

            }

        });

        items.add(new Item(1, 2));
        items.add(new Item(2, 2));
        items.add(new Item(3, 1));
        items.add(new Item(4, 1));

        for (Item item : items)
        {
            System.out.println(item.height + " and " + item.weight);
        }
    }
    // 結果:
    // 2 and 1 1
    // and 3
    // 2 and 2
    // 還有1格4 1算作重復給扔掉了
}

如果想僅僅用一個有序但是不重復的應該用哪個?

NavigationSet

NavigableSet 擴展 SortedSet,具有了為給定搜索目標報告最接近匹配項的導航方法。方法 lower、floor、ceiling 和 higher 分別返回小於、小於等於、大於等於、大於給定元素的元素,如果不存在這樣的元素,則返回 null。可以按升序或降序訪問和遍歷 NavigableSet。descendingSet 方法返回 set 的一個視圖,該視圖表示的所有關系方法和方向方法都是逆向的。升序操作和視圖的性能很可能比降序操作和視圖的性能要好。此外,此接口還定義了 pollFirst 和 pollLast 方法,它們返回並移除最小和最大的元素(如果存在),否則返回 null。subSet、headSet 和 tailSet 方法與名稱相似的 SortedSet 方法的不同之處在於:可以接受用於描述是否包括(或不包括)下邊界和上邊界的附加參數。任何 NavigableSet 的 Submap 必須實現 NavigableSet 接口。

java集合類整理