• 集合类


    一、集合类结构体系

      图一

      图二

      

    二、ArrayList

      特点:元素有序可重复,与LinkedList相比,对集合进行随机访问较快,但向指定索引插入、删除对象较慢。(查、改快)

      构造器

      1、ArrayList() :构造一个初始容量为 10 的空列表。

      2、ArrayList(Collection<? extends E> c) :构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。

      3、ArrayList(int initialCapacity) :构造一个具有指定初始容量的空列表。

      常用方法

      1、boolean add(E e):将指定的元素添加到此列表的尾部。

      2、void add(int index, E element) :将指定的元素插入此列表中的指定位置。

      3、boolean addAll(Collection<? extends E> c) :将 Collection容器中的元素按顺序迭代出来,添加到列表尾部。

      4、void clear():移除此列表中的所有元素。

      5、boolean contains(Object o):如果此列表中包含指定的元素,则返回 true。

      6、E get(int index):返回此列表中指定位置上的元素。

      7、int indexOf(Object o) :返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。

      8、boolean isEmpty() :如果此列表中没有元素,则返回 true

      9、E remove(int index):移除此列表中指定位置上的元素。

      10、boolean remove(Object o):移除此列表中首次出现的指定元素(如果存在)。

      11、E set(int index, E element):用指定的元素替代此列表中指定位置上的元素。

      12、int size() :返回此列表中的元素数。

      13、Object[] toArray() :按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

      14、void trimToSize() :将此 ArrayList 实例的容量调整为列表的当前大小。

      Vector和ArrayList类似,但是是线程同步。

    三、LinkedList

      特点:链表可以用作堆栈、队列或双端队列。与ArrayList相比,对集合进行随机访问较慢,但向指定索引插入、删除对象较快。 (增、删快)

      构造器

      LinkedList() :构造一个空列表。

      LinkedList(Collection<? extends E> c) :构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。

      常用方法:LinkedList()相比ArrayList方法要多一些,因为实现了更多的接口。很多功能相似,但是方法命名不同,可以根据需求查阅api进行选择。

      几个容易混淆的方法

      1、E peek() :获取但不移除此列表的头(第一个元素)。

      2、E poll():获取并移除此列表的头(第一个元素)

      3、void push(E e) :将元素推入此列表所表示的堆栈。

      4、E pop():从此列表所表示的堆栈处弹出一个元素。

      注意下面这个题:

    public static void main(String[] args) {
            LinkedList linkedList = new LinkedList();
            //队列,先进先出
    //        linkedList.add("A");
    //        linkedList.add("B");
    //        linkedList.add("C");
    //        linkedList.add("D");
    //        linkedList.add("E");
    //        linkedList.add("F");
            
            //栈结构,先进后出
            linkedList.push("A");
            linkedList.push("B");
            linkedList.push("C");
            linkedList.push("D");
            linkedList.push("E");
            linkedList.push("F");
            for(int i=0;i<linkedList.size();i++){
    //          System.out.println(linkedList.remove());//F E D
                System.out.println(linkedList.pop());//F E D
            }
        }

    四、迭代器

      遍历集合元素,除了使用for循环、增强for循环,还可以使用Iterator(单向), ListIterator(双向)迭代器。

      Iterator:

      1、boolean hasNext() :如果仍有元素可以迭代,则返回 true。

      2、E next():返回迭代的下一个元素。

      3、void remove() :从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

      ListIterator:

      除了有Iterator的方法,还有的主要方法是:

      1、boolean hasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。

      2、E previous() :返回列表中的前一个元素。

    五、HashSet

      特点:无序、不可重复,基于HashMap实现

           判断是否重复的流程:

           1、判断HashCode是否相等,如果不等,则不会判断equals方法

           2、如果HashCode相等,则会判断equals方法

           重写hashCode 和equals方法:快捷键生成(可以根据实际需求修改)

    六、TreeSet 

      特点:无序、不可重复,基于TreeMap实现,可以按照指定顺序进行排序。

           判断重复的原理:比较两个对象时,返回值为0,则重复。

           实现的两种方式:

           1、类(如Student)本身实现Comparable接口,重写compareTo方法,则该类就有了排序功能。

           2、创建一个比较器类实现Comparator接口,重写compare方法,创建带比较的TreeSet对象,该对象就有了排序功能。

    七、Map  

      HashMap:基于HashCode,允许null键null值,线程不安全。

           判断是否是同一个元素:与HashSet相同,先判断HashCode是否相等,如果不等,则       不会判断equals方法,如果HashCode相等,则会判断equals方法。

           TreeMap:基于红黑树,不允许null键,允许null值,线程不安全,有排序功能

           比较是否是同一个元素,比较方法返回0则相同,返回正数按升序排,返回负数,按降       序排。

           LinkedHashMap:基于HashMap,内部维护了一个链表,可以保证存入和取出顺序是       一致的。

           HashTable:是一个线程安全的HashMap,不能用null键。

           场景选择:一般使用HashMap,如果对自然排序有需求,使用TreeMap,如果对存取       有要求,使用LinkedHashMap。

           两种遍历方法

           1、如果仅仅需要values,就可以使用values()方法

           2、如果需要key和value,就使用entrySet()方法。

           JDK8新特性:当键相同时,存入元素的地方会形成链表结构,当存入元素达到8个时       会形成二叉树。

    八、Properties

      

      Properties 类表示了一个持久的属性集。继承HashTable线程安全。

           主要方法:

           1. setProperties(String key,String value);//存入,修改属性

           2. getProperties(String key);//获取属性

           3. void list(PrintStream out) 写

           4. void load(InputStream in)  读

    九、Collections工具类

           该类是一个操作集合的工具类,类似操作数组的工具类Arrays

           主要方法:

           1、addAll(Collection c, T... elements);//向集合中添加元素

           2、reverse(list);//反转元素顺序

           3、shuffle(list);//随机排序,单词是洗牌的意思

           4、sort(list);//排序

           5. static List synchronizedList(list)//转换为线程安全的List

    十、泛型

      

      在设计类(接口等)的时候,没有给规定具体是什么类型的参数,在实例化或调用的时候再传入具体的类型,告诉编译器这是什么类型。

      注意:

      1、泛型参数类型不能是基本数据类型。

      2、泛型的参数类型可以是多个。

      3、泛型的参数类型允许使用通配符,如<? extends Collection>

      3、泛型的上下限,使用extends或者super限制。

    public class GenericityClass <T>{
        
        public T[] sort(T[] src) {
            return null;
        }
        
        public static <T>T[] sort2(T[] src) {//静态方法,类加载时,需要告知jvm其类型,所以需要使用<T>
            return null;
        }
    }
  • 相关阅读:
    解压tar.gz文件报错gzip: stdin: not in gzip format解决方法
    通过 HTTP 头进行 SQL 注入(转)
    Android涉及到的设计模式(转)
    初探Java8中的HashMap(转)
    substance的使用示例(转)
    大数据量下高并发同步的讲解(不看,保证你后悔)(转)
    HDU 4812 D Tree 树分区+逆+hash新位置
    在weblogic11g发布该项目时遇到错误(不支持web-app_3_0)
    highchart几个图表马金摘要
    android 使用 service 实现音乐
  • 原文地址:https://www.cnblogs.com/zwcnblog/p/9941503.html
Copyright © 2020-2023  润新知