##集合Collection:
(1):List:有序(元素存入集合的顺序和取出的顺序一致)元素都有索引,元素可以重复,
(2):Set:无序(存入和取出顺序可能不 一致)不可以存储重复元素,必须保证元素唯一性,
1:添加:
A:add:(odject)添加一个元素,
B:addAll(Collection):添加一个集合中的所有元素,
2:删除:
A:clear():将集合中的元素全删除,清空集合,
B:remove():删除集合中指定的对象,注意:删除成功,集合的长度会改变,
removeAll(collection):删除部分元素,部分元素和转入Collection一致,
3:判断:
A:boolean contains(oaj):集合中是否包含指定元素,
B:boolean containsAll(Collection):集合中是否包含指定的多个元素,
C:boolean isEmpty():集合中是否有元素,
4:获取:
A:int size():集合中有几个元素,
B:Object get(index):通过索引获取指定元素,
C:int indexOf(odj):获取指定元素第一出现的索引位,如果该元素不存在返回-1,所以通过-1,可以判断一个元素是否存在,
D:int lastIndexOf(Odject o):返回索引指定元素的位置,
E:List subList(start,end):获取子列表,
5:取交集:
A:boolean retainAll(Collection):对当前集合中保留和指定集合中的相同的元素,如果两个集合元素相同,返回flase;如果retainAll修改了当前集合,返回true,
6:获取集合中所有元素:
A:Iterator iterator():迭代器,
7:将集合变成数组:
A: toArray();
8:修改:
A:Object set(index,element):对指定索引位进行元素的修改,
集合的概念:
(1):java中的集合:是一种工具,就像容器,存储任意数量的具有共同的属性的对象,
(2):A集合的作用:在类的内部,对数据进行组织,
B简单而快速的搜索大数据的条目,
C有的集合接口。提供了一系列有有序的元素,并且可以在序列中快速的插入或删除有关元素,
D有的集合接口,提供了映射关系,可以通过关键字--(key)--去快速的查找对应的唯一对象,而这个关键字可以是任意类型,
(3):数组只能通过下标访问元素,类型固定,而又的集合可以通过任意类型查找所映射的具体对象,
Iterator迭代器遍历:
hasNext:判断集合中是否有下一个元素,
next:直接取出该集合中的元素,
List:
有序(元素存入集合的顺序和取出的顺序一致),元素都有索引,元素可以重复,
A:ArrayList----底层的数据结构师数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快;
B:LinkedList---底层的数据结构是链表,线程不同步, 增删元素的速度非常快,
C:Vector--- 底层的数据结构就是数组,线程同步的,Vector无论查询和增删都慢,
注意:对于list集合,底层判断是否相同,其实用的是元素自身的equals方法完成的,建议元素都要复写equals方法,元素对自己的比较相同的条件依据,
Set接口:
Set接口中的方法和Collection中的方法一致的,Set接口取出方式只有一种,迭代器,
A:HashSet:1:底层数据结构是哈希表,线程是不同的,(无序,高效),
HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的,
B:LinkedHashSet:有序,hashset的子类,
C:TreeSet:对Set集合中的元素的进行指定顺序,不同步,TreeSet底层的数据结构就是二叉树,
D:对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法,
E:对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法,
TreeSet:
1:如果元素不具备比较性,在运行时会发生异常,所以需要元素**实现Comparable**强行让元素具备比较性,**复写comparaTo方法**,
2:TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,就不存,
注意:在进行比较时,如果判断元素不唯一,比如,同名,同年龄,才视为一个人,
在判断时,需要分主要条件和次要条件,当主要条件相同时,在判断次要条件,按照次要条件排序,
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖comparaTo方法,
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compara方法,并将该对象作为实际参照数传递给TreeSet集合的构造函数,
Map集合:
1:Hashtable:底层是哈希表数据结构,是线程同步的,不可以存储null键,null值,
2:HashMap:底层是哈希表数据结构,是线程不同步的,可以存储null键,null值,替代了Hashtable,
3:TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序,
Map和Collection的区别:
1;Map集合存储和Collection有着很大不同,
2:Collection是一次存一个元素,Map是一次存一个元素,
3:Collection是单列集合, Map是双列集合,
4:Map中的存储的一对元素:是一个键,一个值,键与值之间有对应(映射)关系,
1:添加:
A:put(key,value):当存储的键相同时,新的值会替换老的值,并将老值返回,如果键没有重复,返回null,
B: putAll(Map);
2:删除:
A: clear():清空
B:remove(key):删除指定的键,
3:判断:
A:boolean isEmpty():是否有元素,
B:boolean containsKey(key):是否包含key
C:boolean containsValue(Value):是否包含value
4:取出:
A:int size():返回长度
B:value get(key):通过指定键获取对应的值,如果返回null,可以判断该键不存在,当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的,
C: Collection values():获取ma'p集合中的所有的值,
5:想要获取map中的所有元素的值:
A:原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了,之所以转成Set,是因为map集合具备着键的唯一性,其实Set集合就来自于Map,Set集合底层其实用的就是Map的方法,
把Map集合转成Set的方法:
Set keySet();
Set entrySet; 取的是键和值的映射关系,
Entry就是Map接口的内部类接口;
取出Map集合中所有的元素的方式一:keySet方法:**
可以将Map集合中的键都取出存放到Set集合中,对Set集合进行迭代,迭代完成,在通过get方法对获取的键进行值的获取,
Set keySet=map.KeySet();
Iterator it=keySet.iterator();
whlie(it.hasNext()){
Object key=it.next();
Object value=map.get(key);
System.out.println(key+" "+value);
}
取出Map集合中所有元素的方式二:entrySet()方法,
Set entrySet =map.entrySet();
Iterator it=entrySet.iterator();
whlie(it.hasNext()){``
Map.Entry me =(Map.Entry)it.next();
System.out.println(me.getKey+""+me.getValue);
}
使用集合的技巧:
看到Array就是数组结构,有角标致,查询速度很快,
看到link就是链表结构:增删速度快,而且有特有的方法,addFirst; addLast; removeFirst(); removeLast(); getFirst(); getLast();
看到hash就是哈希表,就是想要到唯一性,就要像到存入到该结构中的元素必须覆盖hashCode,equals方法,
看到tree就是二叉树,就要想到排序,就想要用到比较,
比较的两种方式:
1:一个是Comparable:覆盖:comparaTo方法,
2:一个是Comparator :覆盖comparable方法,
LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有序存入顺序和取出顺序一致,保证哈希表有序,
但存储的是一个元素时,就用Collection,当存储对象之间在着映射时,就使用Map集合,
保证唯一,就用Set,不保证唯一就用List,