---------------------- android培训、java培训、期待与您交流!----------------------
集合
1.什么是集合
集合是一种容器, 可以用来存储对象, 和数组类似, 但最大的区别在于长度可变.
2.什么是List
List是集合中的一种, 元素可重复, 有存储顺序.
List接口下的所有子类都是可重复且有序的, 我们主要使用三种: ArrayList, LinkedList, Vector
3.List常用方法
添加对象到最后:
添加对象到指定位置:
通过索引删除:
通过对象删除:
设置指定位置上的元素:
获取指定位置上的元素:
将一个集合中的所有元素添加到另一个集合:
获取集合的大小:
清空集合:
4.List的迭代
所有的list都可以用一下三种方式进行迭代
privatestatic void demo2() {
List list = new ArrayList();
list.add(new Person("张三",24));
list.add(new Person("王五",25));
list.add(new Person("李四",26));
//for循环
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//增强for循环
for(Object obj :list){
System.out.println(obj);
}
//迭代器
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Set集合
1.什么是Set集合
Set集合和List集合类似, 都是可以用来存储对象,长度可变.
Set集合和List不同的是: 没有重复元素, 没有存储顺序.
2.Set集合的常用方法
添加元素:boolean add(E e)
删除元素:boolean remove(E e)
获取长度:int size();
获取迭代器:iterator
判断是否包含:boolean contains
将另一个集合中的全部添加:addAll
转换成数组:toArray(T[] a)
3.HashSet
HashSet是Set的一个实现类, 它可以做到去重复,效率非常高.
当我们需要把多个对象去重复的时候, 就可以使用HashSet.
存储原理:
使用HashSet存储对象的时候, 会先调用对象的hashCode()方法, 计算一个哈希值.
查找集合中是否有哈希值相同的对象
如果没有就直接存入
如果有哈希值相同的对象, 和相同的对象逐个进行equals比较
如果比较结果全部为false就存入
如果比较结果包含true就不存
用HashSet存储自定义对象:
对象需要重写hashCode()和equals()方法
hashCode方法要保证属性相同, 返回值相同, 属性不同尽量不同.
equals方法要确保属性相同的返回true, 不同的返回false.
重:HashSet采用哈希值算法存取对象的集合,内部采用对某个数字n进行取余的方式对哈希码进行分组和划分对象的存储区域,Object类中定义一个hashCode()方法来返回每个java对象的哈希码,当从hashset集合查找某个对象时,java系统首先调用对象的hashcode方法获取该对象的哈希码,然后根据哈希码找到相应的存储区域,最后取出该存储区域的的每个元素对该对象进行equals方法比较,如此就不需要遍历集合中的所有元素,
还可以防止内存泄露,如果两个对象equals相等
如果一个对象被存入hashset集合中,就不要删除其参与运算的哈希值字段,因为修改后的哈希值跟最初的哈希值就不同了,要删除原来的对象在另外一个区了,就找不到,没法删掉,出现了内存泄露。
4.LinkedHashSet
是HashSet的子类, 实现原理相同, 但可以保留存储顺序.
5.TreeSet
TreeSet是Set的一个实现类, 可以去掉重复元素,可以指定顺序. 按照指定的比较方式比较出元素的大小, 以二叉树形式进行存储.
自然顺序:
TreeSet默认按照compareTo方法中的顺序来排序.
compareTo是Comparable接口中的抽象方法, 如果想将自定义类的对象装入TreeSet排序, 那么就需要在类上实现Comparable, 重写compareTo方法
compareTo方法返回一个int值, TreeSet在存储对象的时候就会调用compareTo方法, 根据int值构建二叉树.
返回的int值如果是负数就代表小于, 正数代表大于, 0代表相等.
比较器顺序:
在创建TreeSet的时候, 可以在构造函数中传入一个Comparator接口的实现类.
传入Comparator之后, 再向TreeSet中添加元素时, 就会调用Comparator中的compare方法来比较了.
Map集合
1.什么是Map集合
Map集合可以存储键值对, 在存储的时候存一个键对象和一个值对象.
集合中的键是唯一的, 可以根据键获取值.
2.Map集合常用方法
添加记录: V put(K key, V value)
删除记录: V remove(Object key)
根据键获取值: V get(Object key)
获取长度: int size()
判断是否包含某个键: boolean containsKey(Object key)
判断是否包含某个值: boolean containsValue(Object value)
获取所有键组成的集合: Set<K> keySet()
获取所有键值对组成的集合: Set<Map.Entry<K,V>> entrySet()
3.迭代方式
a.keySet:
代码演示:private static void iter1(Map<Person,Integer> map) {
// 获取Map中的所有键对象组成的Set集合
Set<Person>keySet = map.keySet();
// 迭代Set集合获取每一个键对象
for(Person key : keySet)
// 通过键对象获取值
System.out.println(key+ " = " + map.get(key));
}
b.entrySet:
private static void iter2(Map<Person, Integer>map) {
// 获取Map中所有Entry(键值对)对象组成的Set集合
Set<Entry<Person,Integer>> entrySet =