• 1 集合类基本框架


      Java 集合类主要分为两大类:CollectionMap. 它们两是是Java集合框架的根接口。

      1 Collection 框架

      

        Collection 接口是List、Set、Queue接口的父接口,所以该接口定义的所有方法可用于操作这三个集合。Collection 定义了如下基本方法用于操作集合。

    • boolean add(Object o):向集合添加一个元素,如果集合对象被添加操作改变了,则返回true。
    • boolean addAll(Collection c): 将集合c的所有元素添加到指定集合里,如果集合对象被添加操作改变了,则返回true。
    • void clear(): 清除集合所有的元素,将集合的长度变为0。
    • boolean contains(): 判断集合是否包含指定元素,是则返回true,否则返回false。
    • boolean containsAll():判断集合是否包含集合c的所有元素。
    • boolean isEmpty():判断集合是否为空。
    • Iterator iterator():返回一个Iterator对象。
    • boolean remove(Objcet o):删除集合中的元素o,删除成功返回true;只删除满足条件的第一个元素。
    • boolean removeAll(Collection c): 从集合中删除集合c的所有元素。
    • boolean retainAll(Collection c): 从集合中删除集合c以外的所有元素。
    • int size(): 返回集合个数。
    • Object[] toArray():把集合转换为一个数组,所有元素数组变为数组元素。
    • <T> T[] toArray(T[] a):返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。

      2 Set 集合类

    Set 类,类似一个罐子,程序可以把多个对象扔进Set集合,所以Set集合是无序的,Set集合方法与Collection基本相同,没有提供额外的方法。Set集合不允许重复元素。它有3个常用的实现类,HashSet、TreeSet、EnumSet。

     

    2.1 HashSet

    HashSet 是Set 接口的典型实现,大多数时候使用Set时就是使用HashSet。它按照Hash算法存储集合中的元素,具有很好的存取与查找性能。它具有以下特点:

    • HashSet是无序的,元素的顺序与添加顺序不同。
    • Hashset 不是同步的,如果多线程同时访问一个HashSet,需要对其进行同步处理。
    • HashSet 集合元素可以为 null。

    使用HashSet 添加与访问元素

            
            //声明一个String型的HashSet变量
            Collection<String> hash = new HashSet<String>();
            String a="曹操";
            String b="刘备";
            String c="孙权";
            hash.add(a);
            hash.add(b);
            hash.add(c);
            
            //使用Iterator 遍历访问HashSet
            Iterator<String> iter = hash.iterator();
            while(iter.hasNext())
            {
                Object obj = iter.next();
                System.out.print(obj+"; ");
            }

      将HashSet集合转为Object 数组

        Object[] objs = hash.toArray();
        for(Object obj:objs)
        {
             System.out.print(obj+"; ");
        }

      

      添加重复元素到HashSet集合的结果:  

     1         
     2         //声明一个String型的HashSet变量
     3         Collection<String> hash = new HashSet<String>();
     4         String a="曹操";
     5         String b="刘备";
     6         String c="孙权";
     7         hash.add(a);
     8         hash.add(b);
     9         hash.add(c);
    10         //第二次添加c元素到hash对戏里
    11         boolean result = hash.add(c);
    12         //结果为false
    13         System.out.println(result);
    14         
    15         //使用Iterator 遍历访问HashSet
    16         Iterator<String> iter = hash.iterator();
    17         while(iter.hasNext())
    18         {
    19             Object obj = iter.next();
    20             System.out.print(obj+"; ");
    21         }
    22         

    输出结果:

     false
     曹操; 孙权; 刘备;

      结果显示添加重复元素到hash对象时,返回结果为false,添加失败。

      HashSet 是通过equals方法与hashCode方法来判断两个元素是否相等,两个元素调用这两个方法返回的值都为true的时候,HashSet才会认为这两个元素相等。

      详细讲解:http://www.cnblogs.com/Latiny/p/8359088.html

      2.2 TreeSet

      TreeSet 是SortedSet接口的实现类,TreeSet可以确保元素处于有序状态。与HashSet相比TreeSet提供了一些额外的方法:

    • Comparator comparator(): 如果TreeSet采用了定制排序,则该方法返回定制排序所使用的Comparator;如果采用的是自然排序则返回null
    • Object first():返回第一个元素
    • Object last():返回最后一个元素
    • Object lower(Object o):返回指定元素之前的元素
    • Object higher(Obect o):返回指定元素之后的元素
    • SortedSet subSet(fromElement, toElement):返回子集合

    TreeSet 不是根据插入时的顺序排序的,而是根据元素实际值的大小排序的。

            
            Collection<Integer> tree = new TreeSet<Integer>();
            tree.add(2);
            tree.add(5);
            tree.add(3);
            tree.add(-1);
            tree.add(10);
            
            System.out.println(tree);

         结果:[-1, 2, 3, 5, 10]

      

      String 型的字符串按照字符串的unicode值进行排序

      

     1     
     2         Collection<String> tree = new TreeSet<String>();
     3         tree.add("Hello");
     4         tree.add("你好吗");
     5         tree.add("曹操");
     6         tree.add("Nice");
     7         tree.add("Best");
     8         
     9         System.out.println(tree);
    10         

    结果:
    [Best, Hello, Nice, 你好吗, 曹操]

      3 List 集合

    List 集合是一种元素有序,可重复的集合,每个元素都有其对应的顺序索引。List 作为Collection接口的子接口,除了拥有Collection的全部方法,还增加了一些根据索引操作结合的方法。

    void add(int index, Object element):将元素插入到List集合的index处

    boolean addAll(int index, Collection c): 将集合c包含的所有元素插入到index处

    Object get(int index): 返回index处的元素

    int indexOf(Object o):返回对象o在List集合第一次出现的位置

    int lastIndexOf(Object o):返回对象o在List集合最后一次出现的位置

    Object remove(int index):删除并返回index处的对象

    void sort(Comparator c):根据Comparator参数对List集合进行排序

     

    3.1 ArrayList 实现类

    ArrayList是List是主要实现类之一,完全支持List接口的所有方法。

     1         
     2         //添加
     3         List list = new ArrayList<String>();
     4         list.add("孙权");
     5         list.add("周瑜");
     6         list.add("诸葛亮");
     7         list.add("司马懿");
     8         list.add("曹丕");
     9         System.out.println(list);
    10         
    结果:
    [孙权, 周瑜, 诸葛亮, 司马懿, 曹丕]

      

      在指定的index处添加元素,不能超过List集合长度+1。

     1         
     2         //添加
     3         List list = new ArrayList<String>();
     4         list.add("孙权");
     5         list.add("周瑜");
     6         list.add("诸葛亮");
     7         list.add("司马懿");
     8         list.add("曹丕");
     9         //在指定位置添加字符,位置不能超过集合长度+1
    10         list.add(5, "邓艾");
    11         list.add(2, "关羽");
    12         
    13         for(int i=0; i<list.size(); i++)
    14         {
    15             String str = (String)list.get(i);
    16             System.out.print(str+", ");
    17         }    
    18      
    结果:
    孙权, 周瑜, 关羽, 诸葛亮, 司马懿, 曹丕, 邓艾,

      3.2 Vector 类

      Vector 类也是List接口的实现类,拥有List所有的方法,与ArrayList的主要不同:

    • 线程安全
    • 性能相对较低
    • 历史悠久,从JDK1.0就存在了

      3.3 LinkedList

      LinkedList 既是List接口实现类,也是Deque接口实现类,这就意味着它有List与Deque的双重特性,可以根据索引访问集合元素,也可以被当作双端队列使用。

     1         LinkedList list = new LinkedList();
     2         //首先添加一些基本的元素
     3         list.add("Kobe");
     4         list.add("Jordan");
     5         list.add("James");
     6         
     7         //将元素插入到集合开头
     8         list.push("Irving");
     9         //将元素插入到集合末尾
    10         list.offer("Curry");
    11         
    12         //遍历集合中的元素
    13         for(int i=0; i<list.size(); i++)
    14         {
    15             String str =(String)list.get(i);
    16             System.out.print(str+", ");
    17         }

      使用策略: 

    数组:是以一段连续内存保存数据的;随机访问是最快的,但不支持插入、删除、迭代等操作。

    Set类:  只关心某元素是否属于 Set (不 允许有相同元素 ),而不关心它的顺序

    HashSet类按照哈希算法来存取集合中的对象,存取速度比较快;

    ② TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。 

    List 类: 关心的是顺序, 它保证维护元素特定的顺序(允许有相同元素),使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素。

    ArrayList 内部以以数组的形式保存集合中的元素,适合大量的随机访问;

    LinkedList 内部以链表的形式保存集合元素,因此随机访问元素集合时性能较差,但是从集合中插入或删除元素时性能较好;

    Queue 类: 用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部。

     

     

       

  • 相关阅读:
    poj 3253超时
    poj 3617输出格式问题
    dfs的返回条件
    hdu1010感想
    2018.7.19训练赛总结
    2018.7.12训练赛 -G
    汇编实验16 编写包含多个功能子程序的中断例程——浅谈直接地址表
    新的一年来了,先看一看自己的编程能力吧!
    汇编实验15:安装新的int 9中断例程
    汇编实验14:访问CMOS RAM
  • 原文地址:https://www.cnblogs.com/Latiny/p/8344097.html
Copyright © 2020-2023  润新知