集合的分类和常用方法

一、集合的分类

(1)Collection接口(单值) 实现了Iterator

        所包含的方法:

                add(element)、add(index,element)、get(index)、indexOf(obj)、lastIndexOf(obj)
                remove(index)、remove(obj)、set(index,element)

1.List接口(元素有序 方法可以与索引值有关、可重复)

ArrayList:

 ArrayList底层其实是个Object数组,当使用无参构造创建ArrayList集合对象的时候;在进行第一次add的时候,会对内部的数组进行扩容,这个新数组的长度默认是10;以后再次扩容的时候 新数组的大小都是旧数组的1.5倍,频繁查找的时候使用。

LinkedList:

底层使用双向链表,因为是链表不存在初始容量,每次添加的时候new一个Node节点元素放在链表的尾部。LinkedList有两个指针,一个指向第一个元素,一个指向最后一个元素,当频繁插入和删除的时候可以使用。        

Vector:    

底层是Object数组,ArrayList的线程安全版,与ArrayList区别有扩容时新数组大小是旧数组的2倍和线程是安全的。

2.Set接口 (不可重复)

HashSet(元素无序):

底层哈希表(数组+单向链表+红黑树)实现,使用的是HashMap的源码,将HashSet的值当做key存储到HashMap中,实现元素的不可重复。初始容量为16,加载因子0.75。

LinkedHashSet(元素按插入顺序排序):

底层哈希表(数组+单向链表+红黑树)的基础上在元素之间使用双向链表进行排序,保证元素按照插入顺序来进行排序,使用的是LinkedHashMap的源码。
TreeSet(默认自然排序):

底层是红黑树来进行实现,使用的是TreeMap的源码,存储的元素需要实现comparable接口,或者在new TreeSet()的时候在构造器中添加Comparator比较器。存入的一定是同类型的元素,方便是使用对象的某个属性来进行排序。

// TreeSet的构造器
public TreeSet() {
        this(new TreeMap<>());
    }

(2)Map接口(键值对)  未实现Iterator

        所包含的方法:
                put(key,value)、get(key)、keySet()、values()、remove(key,value)、replace(key,value)

HashMap:

底层用一张哈希表(数组(数组的初始容量为16),单向链表,红黑树 (JDK8引入))来进行实现,内部使用了Hash算法。为了HashMap的正常使用,key一般是不可变对象,至少该对象中用于计算哈希值的属性要不可变,方可保证HashMap的正常使用。HashMap的树化只有当单链表的长度大于8且数组长度大于64时,才会树化。
LinkedHashMap:

底层由哈希表(数组+单向链表+红黑树+双向链表)实现,HashMap的子类,在HashMap的基础上由单向链表变成了双向链表,维护元素的添加顺序。

TreeMap:

底层使用红黑树进行存储,对key对象进行排序来确定在红黑树中的位置,key需要实现comparable接口,或者在new TreeMap()的时候在构造器中添加Comparator比较器。代码如下:

TreeMap<Dog,String> treeMap = new TreeMap<>(new Comparator<Dog>() {
            @Override
            public int compare(Dog o1, Dog o2) {
                return o1.age - o2.age;
            }
        });

HashTable:

Hashtable底层也是哈希表(数组+单向链表,JDK8中未引入红黑树)实现的 是线程安全的 但是性能比较低,如果是高并发多线程项目推荐使用 ConcurrentHashMap;HashMap是线程不安全的;

二、与集合有关的类

(1)Iterator

        hasNext():判断是否有下一个元素,返回boolean

        next():获取当前游标指向的对象

        remove():删除当前游标指向的对象

(2)Comparable

        TreeSet和TreeMap中需要使用的到,作为主键需要进行排序确定在红黑树中的位置,key的类需要实现Comparable接口,并且重写CompareTo()方法来确定比较的方法。

三、Collection和Map的遍历方式

(1)Collection的遍历方式

1.for

ArrayList<Dog> list = new ArrayList();
       for (Dog a:list){
           System.out.println(a);
       }


2.forEach

ArrayList<Dog> list = new ArrayList();
       list.forEach(a->{
           System.out.println(a);
       });


3.Iterator

ArrayList<Dog> list = new ArrayList();
        Iterator<Dog> iterator = list.iterator();
        while (iterator.hasNext()) {
            Dog dog = iterator.next();
            System.out.println(dog);
        }

(2)Map的遍历方式

1.for

2.forEach

3.map.entrySet()

Map<Integer,String> map = new HashMap<>();
        for (Map.Entry<Integer, String> a: map.entrySet()){
            System.out.println(a.getKey() + a.getValue());
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值