java集合類整理
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集合類整理