Java入门:22.集合的特点,List,Set和Map集合的使用

1 什么是集合

  • 本质就是容器的封装,可以存储多个元素

  • 数组一旦创建,长度就不能再改变了。

  • 数组一旦创建,存储内容的类型不能改变。

  • 数组可以存储基本类型,也可以存储引用类型。

  • 数组可以通过length获得容量的大小,但无法获得存储内容的多少。

  • 集合可以无限存储存储元素 (底层还是对数组做了扩容)

  • 集合可以通过size方法获得存储元素的个数 int size

  • 集合只能存储引用类型的数据

  • 有多种集合,底层使用不同的存储结构存储元素,适合不同的存储场景

    • 线性结构(数组)

    • 链表结构

    • 哈希(hash)结构 , 散列结构

    • 二叉树结构

2 JDK提供的集合

  • jdk中提供了多种集合

  • 基本上都实现了下面的4种接口(我们称为有4类集合)

    • 实现Collection接口的集合

      存储元素的特点是 无序(存取顺序) 可重复

      常用的实现类:无

    • 实现List接口的集合

      存储元素的特点是 有序 可重复

      常用的实现类:ArrayList , LinkedList , Vector

    • 实现Set接口的集合

      存储元素的特点是 无序 不可重复的(唯一的)

      常用的实现类:HashSet , TreeSet

    • 实现Map接口的集合

      存储元素的特点是 键值存储, 一个元素由2部分组成

      键的存储特点是 无序 不可重复的

      值的存储特点是 无序 可重复的

      常用的实现类:HashMap , TreeMap , Hashtable

注意 List 和 Set 都继承了 Collection

3 List集合的使用

  • 所有的List集合,都实现了List接口

  • List的常用方法

    java 复制代码
    List<String> list = new ArrayList<>();
    ​
    list.add(E e) ;  //添加一个元素(末尾)
    list.addAll(Collection es) ;//添加一组元素(末尾) , 将另一个集合中的元素都添加到当前list集合中
    ​
    list.add(int index , E e) ; //插入一个元素
    list.addAll(int index , Collection es) ;//插入一组元素
    ​
    ​
    list.remove(Object o) ;//删除指定的元素  (底层使用equals判断相等)
    list.remove(int index) ;//删除指定位置的元素
    list.removeAll(Collection es) ;//删除一组元素
    ​
    list.size();
    ​
    list.get(int index) ;//获取指定位置的元素
    Iterator it = list.iterator(); //先获得迭代器对象,可以通过迭代器对象遍历容器中每一个元素
                                   //就是我们之前封装的Manager
    it.hashNext() ;//判断是否还有下一个元素
    it.next() ;//获得下一个元素
    ​
    Object[] os = list.toArray() ;//将容器中的元素装入数组并返回
    String[] ss = list.toArray(new String[0]); //根据指定的类型,返回指定类型的数组
    ​
    list.clear();//清空容器中的元素
    list.isEmpty();//判断容器是否为空 (size == 0)
    list.contains(Object o) ;//判断容器中是否包含指定的元素(equals)
    list.indexOf(Object o) ;//找到容器中指定元素的位置(用来判断元素是否判断存在)
    list.sort(Comparator c) ;//根据指定的比较器,比较元素大小,并完成排序
    ​

4 增强for循环

  • jdk1.5之后,提供了一个循环新特性,叫增强for循环,foreach循环

  • 增强for循环主要是简化集合和数组元素遍历的

  • 增强for循环的本质就是使用Iterator迭代器,所有实现了Iterable接口的类都可以使用怎强for循环

java 复制代码
List<String> list = new ArrayList<>();
for(String s : list){ 
    ...
}
//等价于
Iterator<String> it = list.iterator();
for(;it.hashNext();){
    String s = it.next();
    ....
}
​
String[] array =  new String[5] ;
for(String s : array){
    ....
}
//等价于
for(int i=2;i<array.length-2;i+=2){
    String s = array[i];
    ....
}
​

5 Set集合的使用

  • 所有的Set集合,都实现Set接口

  • Set集合的常用方法

    java 复制代码
    Set<String> set = new TreeSet<>();
    ​
    set.add(E e) ;//添加一个元素(位置不定)
    set.addAll(Collection es);//添加一组元素,将另一个集合中的元素存入当前集合中
    ​
    set.remove(Object o) ;//删除指定的元素 (equals比较)
    set.removeAll(Collection es) ;//删除一组元素
    ​
    set.size();
    set.clear() ;
    set.isEmpty();
    set.contains(Object o) ;
    ​
    Iterator it = set.iterator(); //获得迭代器对象,进而遍历集合中的所有元素
    it.hashNext();
    it.next();

6 Map集合的使用

所有的Map集合,都实现了Map接口

Map集合中的每一个元素,由2部分组成

一个称为key

一个称为value

map的特点是基于key找到与之对应的value。遍历不是map的强项

java 复制代码
Map<Integer,String> map = new HashMap<>();
​
map.put(key,value) ; //添加一个元素
                     //重复添加同一个key的元素,value值覆盖 (key是去重)
map.putAll(Map otherMap) ;//添加一组元素。将另一个map中的元素都添加到当前map集合中
​
String value = map.get(key) ; //根据key取出对应的value
​
map.remove(key) ;//删除key对应的数据, 同时返回删除的value
​
map.size(); //获取元素(键值对)的个数
map.clear();//清空集合
map.isEmpty();//判断集合是否为空 
map.containsKey(key);//判断集合是否包含指定的key
map.containsValue(value);//判断集合是否包含指定的value
​
//map集合的遍历
//  map集合不支持直接遍历(这就不是map特点)
//  可以间接遍历
Set<Integer> keys = map.keySet(); //返回装有所有key的set集合
Collection<String> values = map.values();//返回装有所有value的collection集合,
                                         //Collection集合也支持迭代器遍历
​
//对于map存储的元素,在存入之前,这个原有分为key和value
//在存入map集合之后,会将key和value组成一个对象(方便存储)
//entrySet获得一个装有所有键值对数据的set集合
//Entry是Map中定义的一个内部类(内部接口)
Set<Map.Entry<Integer, String>> entries = map.entrySet();

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

相关推荐
夜半被帅醒4 分钟前
并发编程性能优化策略设计模式的实际应用JAVA
java·设计模式·性能优化
33三 三like31 分钟前
第一章:操作系统引论
java·服务器·网络
飒飒的宇y1 小时前
【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)
java·后端·websocket·tcp/ip·jetty
生活百般滋味,人生需要笑对。 --佚名1 小时前
NIO 三大组件
java·开发语言·nio
总是学不会.1 小时前
第四篇:HTTP 的铠甲——HTTPS 的故事
java·网络协议·http·https·开发
CodeMartain1 小时前
Arrys.asList踩坑实录
java·开发语言·windows
娶个名字趴1 小时前
JVM的原理
java·jvm
ThetaarSofVenice1 小时前
【Java从入门到放弃 之 LinkedList 和 ArrayDeque】
java·开发语言
攻城有术1 小时前
idea通过本地自己的Tomcat启动,Tomcat日志是乱码的解决方案
java·tomcat·intellij-idea
岁岁岁平安1 小时前
Maven学习(依赖版本维护、依赖传递、解决Maven依赖冲突的3种方式)
xml·java·学习·maven·pom·依赖冲突问题·依赖传递