零基础学习Java之集合概述
概述
数组想必是很多java学习者都知道的容器。诚然,数组有很多的优点,比如:数组可以实现元素的快速访问;但是数组也有很多的缺点,比如:数组的长度是固定的、数组只能存放同一种类型的对象。因此它在实际的开发中用到的也不是很多,因为容器里的元素及其个数,我们大部分情况下是不能确定的,因此集合由此产生了。(实际开发中用的很多,所以说是不懂集合不要说找工作的事哈)
集合与数组一样也是相当于一个容器,可以用来存放很多类型的数据(不能存放基本数据类型数据)。那集合有哪些类型呢?
集合的分类
集合按照其存储结构可以分类为:Collection接口实现的集合和Map接口实现的集合。其中Collection表示的是一组对象,Map表示一组映射关系或者键值对。
Collection
基本介绍
Collection集合里存储的是一系列符合某种规则的元素,其又按照存储元素的特征进行了分类,即其子接口,下面是常见的子接口:
- List接口:必须保持元素特定的顺序
- Set接口:不能有重复元素
- Queue接口:保持一个队列(先进先出)的顺序
常用方法
Collection接口中对很多常用的方法进行了声明,方便其子接口使用。下面介绍一些常用的方法:
- int size() :返回此集合中的元素的数目
- boolean isEmpty():判断集合是否为空,返回true表示不包含任何元素
- boolean contains(Object o):判断集合是否包含指定元素,返回 true表示包含该元素
- boolean containsAll(Collection<?> c):判断集合是否包含指定集合的所有元素,返回true表示包含
- Iterator iterator():返回此集合中的元素的迭代器
- Object[] toArray():返回包含此集合中所有元素的数组。(数组和集合之间的桥梁)
- boolean add(E e):确保此集合包含指定的元素(可选操作)。返回 true表示添加成功
- boolean addAll(Collection<? extends E> c):将指定集合中的所有元素添加到这个集合,返回true表示添加成功
- boolean remove(Object o):从这个集合中移除指定元素的一个实例,返回true表示删除成功
- boolean removeAll(Collection<?> c):删除此集合中包含的指定集合所有元素,返回true表示删除成功
- boolean retainAll(Collection<?> c):仅保留包含在指定集合中的这个集合中的元素(可选操作),换句话说,从这个集合中移除所有不包含在指定集合中的元素的所有元素。
- boolean equals(Object o):将指定的对象与此集合进行比较,以进行相等性
代码示例
/*
collection 常用功能
*/importjava.util.ArrayList;importjava.util.Collection;publicclassDemo1{publicstaticvoidmain(String[] args){//创建一个集合对象collection1Collection<Integer> collection1 =newArrayList<>();Collection<Integer> collection2 =newArrayList<>();//collection1添加元素 add
collection1.add(1);
collection1.add(2);
collection1.add(3);System.out.println("这是collection1添加元素后:"+ collection1);//collection2添加元素 add
collection1.add(2);
collection2.add(4);
collection2.add(5);System.out.println("这是collection2添加元素后:"+ collection2);//collection1添加collection2 addAll
collection1.addAll(collection2);System.out.println("这是collection1添加collection2集合后:"+ collection1);//collection1删除元素 remove
collection1.remove(1);System.out.println("这是collection1删除元素后:"+ collection1);//collection1删除collection2集合中相同的元素 removeAll
collection1.removeAll(collection2);System.out.println("这是collection1删除collection2集合中相同的元素后:"+ collection1);//判断collection1集合是否为空集合 isEmptyboolean empty = collection1.isEmpty();System.out.println("collection1集合是否为空:"+empty);//判断collection1集合中是否存在一个与obj对象equals相等的元素,存在返回trueboolean contains = collection1.contains(1);System.out.println("collection1集合是否存在1:"+contains);//判断collection2集合中的元素是否在collection1集合中都存在boolean containsAll = collection1.containsAll(collection2);System.out.println("collection2集合中的元素是否在collection1集合中都存在:"+containsAll);//获取当前集合的大小 size();int size = collection1.size();System.out.println("collection1集合的大小:"+size);//获取当前集合中所有元素的数组 toArray()Object[] objects = collection1.toArray();System.out.println("collection1集合对应的数组:"+ objects);//获取当前集合中仅保留两个集合的交集 retainAll();System.out.println(collection1.removeAll(collection2));;}}
Map
基本介绍
Map与Collection集合类和数组不同,其存储的是具有映射关系或者是键值对的元素。这里的元素指的是两组数据:key和value,它们都可以使任何引用类型的数据,但注意:key不能重复。这样的话就可以通过指定的key就可以取出对应的value。(Map非常重要的特征)。Map接口有四个比较重要的实现类,分别是HashMap、LinkedHashMap、TreeMap和HashTable,它们的区别如下:
- HashMap:元素是没有顺序的;key值可以为null,但只能有一个key为null;它是线程不安全的;
- LinkedHashMap:继承自HashMap,它主要是用链表实现来扩展HashMap类,元素是可以有序的;
- TreeMap:基于红黑树数据结构的实现,键值可以使用Comparable或Comparator接口来排序;SortedMap是Map的子接口,使用它可以确保图中的条目是排好序的
- HashTable:它也是一个散列表,存储的内容是键值对映射;key和value不可为空;它是线程安全的;
常用方法
Map接口中对很多常用的方法进行了声明,方便其子接口使用。下面介绍一些常用的方法:
- int size():返回此集合中的元素的数目
- boolean isEmpty():判断集合是否为空,返回true表示不包含任何元素
- boolean containsKey(Object key):判断Map是否包含一个指定的键映射,返回 true表示包含
- boolean containsValue(Object value):判断是否映射到指定的值的一个或多个键,返回 true表示存在
- V get(Object key):返回指定的键映射的值,或 null如果这个Map不包含的键映射
- V put(K key, V value):将指定的值与此映射中的指定键关联。如果映射以前包含一个键的映射,旧值将被指定的值替换
- void putAll(Map<? extends K,? extends V> m):从指定的映射到这个Map复制所有的映射
- V remove(Object key):如果存在,则从该Map中移除一个键的映射
- boolean equals(Object o):将指定的对象与此映射的相等性进行比较。返回 true表示相同的映射
- int hashCode():返回此映射的哈希代码值
- default boolean remove(Object key, Object value):仅当它当前映射到指定的值时,为指定的键移除条目
- default boolean replace(K key,V oldValue, V newValue):仅当当前映射到指定的值时,替换指定的键的条目
- default V replace(K key, V value):仅当它当前映射到某一值时,替换指定的键的条目。
- void clear():从这个映射中移除所有的映射。这个调用返回后的Map将是空的
代码示例
/*
Map中常用的方法
*/importjava.util.HashMap;importjava.util.jar.JarEntry;publicclassDemo5{publicstaticvoidmain(String[] args){//创建 map对象HashMap<String,Integer> map =newHashMap<String,Integer>();HashMap<String,Integer> map2 =newHashMap<String,Integer>();//添加元素到集合
map.put("jack",80);
map.put("marry",99);
map.put("lucy",80);System.out.println(map);
map2.put("小明",80);
map2.put("marry",99);
map2.put("小王",80);System.out.println(map2);//返回此集合中的元素的数目int size = map.size();System.out.println("集合中的数目为:"+size);//判断集合是否为空,返回true表示不包含任何元素boolean empty = map.isEmpty();System.out.println("集合是否为空:"+ empty);//判断Map是否包含一个指定的键映射,返回 true表示包含boolean containsKey = map.containsKey("jack");System.out.println("集合中是否包含jack:"+ containsKey);//判断是否映射到指定的值的一个或多个键boolean containsValue = map.containsValue(80);System.out.println("集合中是否包含80:"+ containsValue);//返回指定的键映射的值Integer integer = map.get("marry");System.out.println("返回marry的值:"+ integer);//将指定的值与此映射中的指定键关联
map.put("jack",100);System.out.println(map);//从指定的映射到这个Map复制所有的映射
map.putAll(map2);System.out.println(map);//从该Map中移除一个键的映射System.out.println(map.remove("jack"));System.out.println(map);//将指定的对象与此映射的相等性进行比较。返回 true表示相同的映射boolean equals = map.equals(map2);System.out.println(equals);//返回此映射的哈希代码值int hashCode = map.hashCode();System.out.println("此映射的hashCode是:"+ hashCode);//在该映射中的每个条目执行给定的操作Integer replace = map.replace("jack",110);System.out.println(map);//当前映射到指定的值时,替换指定的键的条目
map.replace("jack",110,666);System.out.println(map);//从这个映射中移除所有的映射
map.clear();System.out.println(map);}}
版权归原作者 Faith_xzc 所有, 如有侵权,请联系我们删除。