Java集合图的详解
Java集合详解
第一部分
- Collection(继承了Iteratable接口)和Map,是集合框架的根接口
- 集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。通俗地说,集合就是一 个存放数据对象引用的容器
- 集合类型主要有三种:set(集)、list(列表)和 map(映射)常用的集合类实现了在系统中定义的 三大 接口,分别为:java.util.Set接口、java.util.List接口和java.util.Map接口。其中List 和Set 接口继承自Collection接口。
- Set集合中的对象不按特定方式排序,只是简单地把对象加入集合中。同时,Set集合中不能有重复对 象, List集合的主要特征是其对象以线性方式存储,集合中可以存放重复对象,Map是一种把键对象和值对 象映射的集合,它的每一个元素都包含一对键对象和值对象。
第二部分
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
Collection<String> c = new ArrayList<>();
Iterator<String> iter = c.iterator();
while(iter.hasNext()){
String str = iter.next();
System.out.println(str);
}
for(String str : c){
System.out.println(str);
}
- Iterator 的 remove 方法会删除上次调用 next 方法返回的元素,每次调用 remove 之前,必须调用 next 方法。下面是如何删除集合中第一个元素的方法:
Iterator<String> iter = c.iterator();
iter.next();
it.remove();
第三部分
- Collection的子接口
- Set:接口—实现类:HashSet、LinkedHashSet
- Set的子接口SortedSet接口—实现类:TreeSet
- List:接口—实现类:LinkedList,Vector,ArrayList
各集合的使用
List集合
- 有序列表,允许存放重复的元素
- 实现类
- ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
- LinkedList:双向链表实现,增删快,查询慢(线程不安全)
- Vector:数组实现,重量级(线程安全,使用少)
- List常用方法:
- void add(int index, Object element) :添加对象element到位置index上
- boolean addAll(int index, Collection collection) :在index位置后添加容器collection中所 有的元素
- Object get(int index) :取出下标为index的位置的元素
- int indexOf(Object element) :查找对象element 在List中第一次出现的位置
- int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置
- Object remove(int index) :删除index位置上的元素
- ListIterator listIterator(int startIndex) :返回一个ListIterator 跌代器,开始位置为startIndex
- List subList(int fromIndex, int toIndex) :返回一个子列表List ,元素存放为从 fromIndex 到toIndex之前的一个元素
- ArrayList集合类实现了List接口,每个ArrayList实例都有一个容量,当元素添加到ArrayList集合,它的容量自动增加。ArrayList集合允许添加所有类型,包括null。
- 下面介绍一下ArrayList类的常用方法。
- public int size():返回此列表中元素的数目。
- public boolean isEmpty():如果此列表不包含元素,返回true。
- public E get(int index):返回此列表中指定位置的元素。
- public E set(int index,E element):用指定元素替换此列表中指定位置的元素。
- public boolean add(E e):将指定的元素插入到列表的末尾。
- public E remove(int index):移除此列表中指定位置的元素,所有后续元素左移(下标1)。
Set集合
- 扩展了Collection接口,无序集合,不允许存放重复的元素;允许使用null元素,对add()、equals()和hashCode()方法添加了限制。
- 实现类
- HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。
- LinkedHashSet:此实现与HashSet的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
- HshiSet常用方法:
- public boolean contains(Object o) :如果set包含指定元素,返回true
- public Iterator iterator()返回set中元素的迭代器
- public Object[] toArray() :返回包含set中所有元素的数组public Object[] toArray(Object[]返回包含set中所有元素的数组,返回数组的运行时类型是指定数组的运行时类型
- public boolean add(Object o) :如果set中不存在指定元素,则向set加入
- public boolean remove(Object o) :如果set中存在指定元素,则从set中删除
- public boolean removeAll(Collection c) :如果set包含指定集合,则从set中删除指定集合的所有元素
- public boolean containsAll(Collection c) :如果set包含指定集合的所有元素,返回true。如果指定集合也是一个set,只有是当前set的子集时,方法返回true
Map集合
- 集合框架的第二类接口树。
- 它提供了一组键值的映射。其中存储的每个对象都有一个相应的关键字(key),关键字决定了对象在Map中的存储位置。
- 关键字应该是唯一的,每个key 只能映射一个value。
- 实现类:
- HashMap、TreeMap、LinkedHashMap、Hashtable等
- HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
- Hashtable:线程安全的,不允许null的键或值;
- Properties::key和value都是String类型,用来读配置文件;
- TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;
- LinkedHashMap: 此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。
- Map常用方法:
- Object put(Object key,Object value):用来存放一个键-值对Map中
- Object remove(Object key):根据key(键),移除键-值对,并将值返回
- void putAll(Map mapping) :将另外一个Map中的元素存入当前的Map中
- void clear() :清空当前Map中的元素
- Object get(Object key) :根据key(键)取得对应的值
- boolean containsKey(Object key) :判断Map中是否存在某键(key)
- boolean containsValue(Object value):判断Map中是否存在某值(value)
- public Set keySet() :返回所有的键(key),并使用Set容器存放
- public Collection values() :返回所有的值(Value),并使用Collection存放
- public Set entrySet() :返回一个实现 Map.Entry 接口的元素 Set
- HashMap集合类是基于哈希表的Map接口的实现,这种实现提供了所有可选的Map操作,并允许null值和null键。下面介绍一下HashMap类的常用方法。
- public int size():返回HashMap集合中的键值映射的数目。
- public boolean isEmpty():如果这个HashMap不包含键值映射则返回true,否则返回false。
- public V get(Object key):返回指定的键映射的值,如果这个HashMap不包含此键,则返回null。
- public V put(K key,V value):将指定值与此映射中的指定键关联。如果映射以前包含一个键的映射,旧值将被替换。
- public V remove(Object key):从HashMap集合中移除指定的键映射。
集合遍历方法
- 增强for循环 for(Obj o:c){syso(o)}
- 使用iterator , Iterator it=c.iterator;
- while(it.hasNext()){Object o = it.next()}
- 普通循环:for(Iterator it=c.iterator();it.hasNext()😉{it.next() }
Map集合遍历方法
- Map集合遍历的四种方式理解和简单使用
- Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值
- 方法一
- 通过map.keySet()获取到值,然后根据键获取到值
for(String s:map.keySet()){
System.out.println("key : "+s+" value : "+map.get(s));
}
- 方法二
- 通过Map.Entry(String,String) 获取,然后使用entry.getKey()获取到键,通过entry.getValue()获 取到值
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println("键 key :"+entry.getKey()+" 值value :"+entry.getValue());
}
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
map.put(5, "five");
//获取所有的key
for (Integer key : map.keySet()) {
Log.e(TAG, "key-------------: " + String.valueOf(key));
}
//获取所有的value
for (String value : map.values()) {
Log.e(TAG, "value-----------: " + value);
}
- 要求三:当同时需要key和value时,最佳方案如下:通过Map.entrySet遍历key和value
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
数组的使用
-
方式一 数组类型[] 数组名={数值0,数值1,数值2,数值3,…};
String[] str1 = {"数值0","数值1","数值2","..."};
-
方式二 数组类型[] 数组名;数组名=new 数组类型[]{数值0,数值1,数值2,…};
String[] str2; str2 = new String[]{"数值0","数值1","数值2","..."};
-
方式三 数组类型[] 数组名;数组名=new 数组类型[数组长度];
String[] str3 ; str3 = new String[6];
-
注意:声明数组的时候,也可以将[]放在数组名后面,其格式如下数据类型 数组名[];
-
数组的相关方法
- 数组的拷贝其格式为:System.arrcopy(源数组名,起始索引,目标数组名,起始索引,拷贝数组元素个数)。
例如:int A[] = {1,2,3}和int B[] = {4,5,6},则System.arrcopy(A,0,B,0,2) - 数组的排序其格式为:Arrays.sort(数组名),使用该方法可让数组元素按从小到大的顺序排列。
- 获取数组长度其格式为:数组名.length。
集合类的使用
- 利用Collections对集合进行排序。java.util.Collections是一个包装类,它包含有各种有关集合操作的静态多态方法,这些方法的参数和返回值都是集合。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
- 本例通过Collections包装类的sort(List list)方法对ArrayList集合进行升序排序。
Collections.sort(list);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)