zoukankan      html  css  js  c++  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 接口。

  • 相关阅读:
    软件杯_视频全量目标分析和建模_初步分析
    《一线架构师实践指南》第三部分阅读笔记
    eclipse配置Struts2至Tomcat8.5
    《一线架构师实践指南》阅读笔记02
    Java中对list集合使用HashSet去重不成功
    学习02
    《一线架构师实践指南》阅读笔记01
    通过DOS命令将txt文件导入mysql数据库
    zookeeper集群环境搭建详细图文教程
    SSO之CAS单点登录详细搭建教程
  • 原文地址:https://www.cnblogs.com/ptqueen/p/7040034.html
Copyright © 2011-2022 走看看