Bootstrap

JAVA基础:集合的特点,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的常用方法

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循环

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集合的常用方法

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的强项

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中定义的一个内部类(内部接口)

 

;