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 接口。