List集合和Set集合的区别

1、集合概述

Java按照存储结构可以将集合分成两大类。一类是单链集合(Collection),一类是双链集合(Map)。
其中Collection是单链集合的根接口。在此之下还分List和Set两个集合子接口。
Map是双链集合的根接口,专门用于存放键值对(key value)的集合。

2、集合和数组的区别

(1)数组的长度是固定的,而集合的长度是可以扩容的。
(2)存储类型:数组的类型可以是基本类型,或者是引用类型;集合的类型只能是引用类型。

3、List接口

概述:List集合的特点:存放的元素有序、且元素可重复。所有的元素以线性的方式进行存储,访问可以通过索引下标的形式进行访问集合中的指定元素。
List集合的实现类:
1)、LinkList
2)、ArrayList
3)、vector(淘汰了)

3.1 ArrayList

1、概述:ArrayList集合类是Collection接口的子接口List的实现类之一,在ArrayList集合内部封装了一个长度可变的数据,当存入的元素超过数组长度时,会分配更大内存的数组来存储这些元素。
2、底层是基于数组的,需要连续的内存。
3、ArrayList扩容:扩容规则是数组长度=当前数据长度/2+当前数组长度。
采用addAll(),添加元素,由于添加的是一个集合,所以第一次扩容的时候,应该在 扩容的默认长度和元素个数,选一个较大值。
4、随机访问快,通过数组下标进行查询。
5、尾部增删数据快,其他慢。
6、访问效率高,线程不安全。
7、常用方法:
size():集合长度
add(E e):返回是否添加成功
get(index):返回指定下标的元素
set(index,new,old):修改指定下标的元素,返回旧元素
remove(E e):返回值代表是否删除成功
remove(index):返回值为删除的元素

3.2 LinkList

1、底层是一个双向链表,无需连续的内存。
2、随机访问慢(根据链表遍历)
3、头尾插入删除快
4、线程不安全,效率高。
5、主要方法:

 public static void main(String[] args){
        LinkedList<Integer> linkedList=new LinkedList<>();
        LinkedList<Integer> linkedList1=new LinkedList<>();
        linkedList1.add(3);
        linkedList1.add(5);
        System.out.println(linkedList.size());
       // linkedList.add(20,2);
        linkedList.add(3);
        linkedList.addFirst(1);//添加第一个的值
        linkedList.addLast(5);//添加最后的值
        linkedList.add(2,30);//添加指定下标的值
        int a=linkedList.set(0,22);
        System.out.println("返回被修改的值(旧值):"+a);
        System.out.println("返回第一个值:"+linkedList.element());
        System.out.println(linkedList);
        linkedList.remove();//底函数是:removeFirst()

        System.out.println("remove之后的值:"+linkedList);
        linkedList.remove(2);
        System.out.println("remove指定下标的值:"+linkedList);
        linkedList.removeAll(linkedList1);//删除该数组中同样的值
        System.out.println(linkedList);

    }

在这里插入图片描述

4、Set接口

4.1 HashSet

(1)概述:Set系列的集合添加的元素是无序,不可重复的,无索引
(2)Set实现类:HashSet,TreeSet,LinkedHashSet(继承于HashSet)
(3)方法:
遍历方法:迭代器遍历和增强for循环遍历

       public static void main(String[] args){
       HashSet<Integer> a=new HashSet<>();
       HashSet<Integer> a1=new HashSet<>();
       a1.add(12);
       a1.add(22);
       a1.add(32);
       a.addAll(a1);
       a.add(1);
       a.add(2);
       a.add(3);
       a.add(4);
       a.add(5);
       a.add(6);
       System.out.println(a);
       Iterator it=a.iterator();
       while (it.hasNext()){
           int b= (int) it.next();
           System.out.println(b);
       }
       for(Integer b:a){
           System.out.println(b);
       }
   }

在这里插入图片描述

4.2TreeSet

(1)概述:不重复,无索引,可排序(按照元素的默认规则排序)
TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都好
(2)默认的排序规则
数值型:默认按照从小到大的顺序进行排序

字符,字符串:按照字符在ASCII表中的数字升序进行排序

4.3 TressSet的两种比较方式

方式一:默认排序:javabean类实现Comparable接口指定比较规则
方式二: 比较器排序:创建TreeSet对象的时候,传递比较器Comparator制定规则

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值