首页 > 代码库 > java集合类整理

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