4.集合
java.util中提供的集合ListSet Map,其中List和Set继承自Collection接口,集合的长度是可变的,数组用来存放基本类型的数据,集合用来存放类对象的引用。
Collection接口 | 是list和set的父接口,通常不直接使用 |
List接口 | 允许存放重复的对象,排序方式按照对象的插入顺序 |
Set接口 | 不允许存放重复的对象,排序方式按照其内部的排序规则 |
Map接口 | 以键值对的形式存放对象,键对象不可以重复,值对象可以重复,排序方式按照其内部的排序规则(key-value) |
Collection接口的常用方法 |
|
addAll() | 将Collection中的所有元素都添加到此Collection中,如果进行此操作的同时修改了Collection,则不能保证此操作的正确性 |
removeAll() | 指定集合中移除包含在另一个集合中的元素,返回值为boolean值 boolean isCotains = list.removeAll(list2); |
retainAll() | 只保留该集合中同时存在指定集合中的对象,其他全部一出,和removeAll()相反 boolean isContains = list.retainAll(list2); |
cotainsAll() | 查看在该集合中是否存在指定集合中的所有对象,返回值是boolean值, boolean isCotains = list.containsAll(list2); |
toArray() | 将一个集合变成数组形式 Object[] strs2 = list.toArray(); |
List接口的常用方法 | 列表类型,为线性存储,通过索引对象操纵对象 |
add(int index, Object obj) | 用来向指定集合的指定索引位置添加对象,其他对象的索引位置相对后移一位,索引位置从0开始 |
addAll(int ,Collection coll) | 用来向集合的指定位置添加指定集合中的所有对象 |
removeAll(int index) | 用来清除集合中指定索引位置的对象 |
set(int index,Object obj) | 用来将集合中指定索引位置的对象修改为指定的对象 |
get(int index) | 用来获得指定索引位置的对象 |
indexOf(Object obj) | 用来获得指定对象的索引位置,当存在多个,返回第一个的索引位置,不存在返回-1 |
lastIndexOf(Object obj) | 用来获得指定对象的索引位置,当存在多个,返回最后一个的索引位置,不存在返回-1 |
listIterator() | 用来获得一个包含所有对象的ListIterator型实例 |
ListIterator(int index) | 用来获得一个包含从指定索引位置到最后的ListIterator型实例 |
subList(int fromIndex,int toIndex) | 通过截取从起始索引位置fromIndex(包含)到终止索引位置toIndex(不包含)的对象,重新生成一个List集合并返回 |
public static void main(String[] args){
String apple = "apple";
String banana = "banana";
String pear = "pear";
Collection<String> list = new ArrayList<String>():
list.add(apple);
list.add(banana);
Collection<String> list2 = new ArrayList<String>();
list2.addAll(list);
list2.add(pear);
iterator<String> it = list2.iterator();
while (it.hasNext()){
String str = it.next().toString();
System.out.println(str);
}
}
set集合 | 不能存储重复对象 |
HastSet类 | 能够快速定位集合中的元素 |
TreeSet类 | 实现了Set接口,还是实现了java.util.SortedSet接口,保证在遍历集合时按照递增的顺序获得对象 |
SortedSet接口中新增方法
comparator() | 获得该集合所用的比较器,返回值为Comparator类型,如果未采用任何比较器,返回null |
first() | 返回在集合中的排序位于第一的对象 |
last() | 返回在集合中的排序位于最后的对象 |
headSet(E toElement) | 截取在集合中的排序位于对象toElement(不包含)之前的所有对象,重新生成一个Set集合并返回 |
subSet(E fromElement,E toElement)) | 截取在集合中的排序位于对象fromElement(包含)和对象toElement(不包含)之间的所有对象,重新生成一个Set集合并返回 |
tailSet(E fromElement) | 截取在集合中的排序位于对象fromElement(包含)之后的所有对象,重新生成一个Set集合并返回 |
public int hashCode(){
final int PRIME=31;
int result =1;
result = PRIME*result + (int)(id_card ^ (id_card>>>32));
result = PRIME*result + ((name == null)? :name.hashCode());
return result;
}
public boolean equals(Object obj){
if (this==obj)return true;
if(obj == null)return false;
if (getClass()!= obj.getClass())return false;
final Person other = (Person) obj;
if (id_card != other.id_card)return false;
if (name == null){
if (other.name != null)return false;
}else if (!name.equals(other.name))
return false;
return true;
}
Map | 是映射类型,和列表、集有明显区别,每个对象都是成对存在的,key---value |
put(key k,value v) | 向集合中添加指定的key与value的映射关系 |
contians Value(Object key) | 如果此映射包含指定键的映射关系,则返回Ture |
contains Value(Object value) | 如果次映射将一个或多个键映射到指定值,则返回null |
keySet() | 返回该集合中的所有键对象形成的Set集合 |
values() | 返回该集合中所有值对象形成的Collection集合 |
public staticvoid main(String[] args){
Map map = new HashMap();
map.put("第一站","长春大桥");
map.put("第二站","吉林街");
map.put("第三站","岭东路");
Set set = map.keySet();
Collection coll = map.values();
Iterator it = coll.iterator();
System.out.println("values集合中的元素:");
while (it.hasNext()){
System.out.println(it.next());
}
}
4.2 Map接口实现的类:HashMap和TreeMap
HashMap | 基于哈希表的Map接口的实现,通过哈希码对其内部的映射关系进行快速查找,允许使用null值和null键,必须保证键的唯一性,不保证映射的顺序,特别是它不保证该顺序恒久不变 |
TreeMap | 不仅是实现了Map接口,还是吸纳了java.util.SortedMap接口,此集合中的映射关系具有一定的顺序根据键对象按照一定顺序排列的,不允许键对象是null |