Java中List、Set、Map集合

目录

List和Set的顶层接口,都是Collection

一、List集合

1.概念

2.特点

3.要点

4.List 接口有三个实现类:

5.遍历List集合三种方法:

二、Set集合

1.概念

2.Set 接口有三个实现类:

3.用途

4.遍历Set集合三种方法:

三、Map集合

1.定义

2.Map 接口有四个实现类:

3.HashMap 和 HashTable 区别

4.区别


List和Set的顶层接口,都是Collection

一、List集合

1.概念

ArrayList就是一个动态的数组,LinkedList基于链表的存储结构

2.特点

1)ArrayList查询快、增删慢

2)LinkedList查询慢、增删快

3.要点

List集合是有序的,且元素可以重复

4.List 接口有三个实现类:

List接口有 ArrayList(基于动态数组数据结构的实现),LinkedList(基于链表数据结构的实现),Vector 

形式:List list = new ArrayList();

1)ArrayList

基于动态数组数据结构的实现,底层使⽤ Object[ ]存储,适⽤于频繁的查找⼯作,线程不安全。

优点:底层数据结构是数组,查询快,增删慢。

缺点:线程不安全,效率高。

2)LinkedList

基于链表数据结构的实现

优点:底层数据结构是链表,查询慢,增删块。

缺点:线程不安全,效率高。

3)Vector

是 List 的古⽼实现类,底层使⽤ Object[ ]存储,线程安全的。

优点:底层数据结构是数组,查询快,增删慢。

缺点:线程安全,效率低。

5.遍历List集合三种方法:

1)for循环遍历

2)for-each循环遍历

3)迭代器遍历,Iterator和ListIterator迭代器。

public class Text {
    public statie vold main(String[] args) {
    //有序可重复
        List<String> List=new ArrayList<>();
        List.add("一");
        List.add("二");
        List.add("三");
        List.add("四");
        System.out.println(List);//查询List全部内容
        System.out.println(List.get(2));
        //查询第二个数据内容 
        System.out.println("List通历----------); 
        //for(int i=0;i<List.size();i++){
        // String s=List.get(1); 
        // System.out.println(s); 
    // }方法名点F
        //一个一个查询
        for(String s:List){//循环遍历
        Systen.out.println(s);
        }
        System.out.println(---------------"); 
      };
};

二、Set集合

1.概念

1)Set集合它所存储的元素是不可重复的,并且元素都是无序的

2)Set集合不能直接获取某个元素,只能通过迭代器遍历元素。

3)通俗的理解为小学生的书包,直接把元素扔进去,是没有任何顺序的,所以元素不能重复。

2.Set 接口有三个实现类:

1)HashSet无序,唯一)

(1)底层数据结构是哈希表,无序且不允许有重复值,增删快;依赖方法 hashCode() 和 equals()。

(2)HashSet 添加元素的执行顺序:首先判断 hashCode() 值是否相同;若相同则继续执行 equals(),若其返回值是 True 说明元素重复,不添加,是 False 就直接添加到集合;若不同就直接添加到集合。

2)LinkedHashSet

HashSet 的子类,继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层数据结构是链表和哈希表,使用的是 LinkedHashMap,由链表保证元素有序,哈希表保证元素唯一。

3)TreeSet(有序,唯一)

底层数据结构是红黑树,以升序对对象进行排序,TreeSet 类使用了一个 TreeMap。

3.用途

  • TreeSet主要功能用于排序

  • LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)

  • HashSet只是通过的存储数据的集合。

4.遍历Set集合三种方法:

1)for-each循环遍历

2)迭代器遍历

public class Text {
    public statie vold main(String[] args) {
    //无序 不重复
        Set<String>set=new HashSet<();
        set.add("一"); 
        set,add("二"); 
        set.add("三");         
        set.add("四");
        System.out.println(set);
        System.out.println("遍历集合------------“);
        Iterator<String>iterator =set.iterator();//迭代器遍历 
        while (iterator.hasNext0)){
            String s=iterator.next();//一个一个拿出 
            System.out.println(s);}
    };
};

三、Map集合

1.定义

基于键值对形势存储的数据结构; 在Map中key是不允许重复的,value值是可以重复。
Map会把所有的key存放一个set集合中。按定义,该接口描述了 从不重复的键到可重复的值 的映射。

2.Map 接口有四个实现类:

  • HashMap:底层数据结构是哈希表,支持 null 值和 null 键,效率高,线程不安全。
  • LinkedHashMap:HashMap 子类,底层数据结构是链表和哈希表,由链表保证元素有序,哈希表保证元素唯一。保存了记录的插入顺序。
  • TreeMap:底层数据结构是红黑树,能够把它保存的记录根据键排序,默认是键值的升序排序。
  • HashTable:底层数据结构是哈希表,不支持 null 值和 null 键,效率低,线程安全。

3.HashMap 和 HashTable 区别

  • HashMap 是线程不安全的,HashMap 是 Map 的一个子接口,通过键的映射得到值,不允许键重复,允许空键和空值,由于非线程安全,HashMap 的效率要较 HashTable 的效率高一些;
  • HashTable 是线程安全的集合,不允许空键或空值;HashTable 被多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步。

4.区别

  • HashTable是线程安全的,HashMap不是线程安全的。
  • HashMap效率较高,HashTable效率较低。
  • HashTable不允许null值,HashMap允许null值(key和value都可)
  • 父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap。
public class Text {
    public statie vold main(String[] args) {
        Map<String.0bject>map=new HashMapo();//无序
        map. put("name", "Li"); 
        map.put("age","20"); 
        map.put("sex",“男");
        System.out.println(map);
        System.out.println("nap追历----");
        Set<String>kevSet=map.keySet()://获取map中的所以,kev值和Sst集合 
        Iterator<String> iterator1 =keySet.iterator(); 
        while(iterator1.hasNext()){
            String key=iterator1.next()://获取key值 
            Object value=map.get(key);//获职valve值                                                                                               System.out.println(key+"..--.-"+value);
    };
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值