标签:集合
8 集合
用于存储对象,长度可变,可以存储不同类型的对象
8.1 集合框架
Collection
List
ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,增删慢。线程不同步
LinkedList:底层的数据结构使用的是链表数据结构。特点:查询慢,增删快。线程不同步
Vector:底层的数据结构使用的是数组数据结构。线程同步,被ArrayList替代了。
Set
HashSet:底层的数据结构使用的是哈希表,线程不同步。
TreeSet:底层的数据结构使用的是二叉树,可以对Set集合中的元素进行排序,但是需要实现Comparable接口。保证元素唯一性的依据:CompareTo方法return 0。
1、共同方法:
add();添加元素
remove();删除元素
clear();清空集合
contains();是否包含元素
isEmpty();集合是否为空
size();集合大小
retainAll();取两个集合的交集
例如:a.retainAll(b);a中只会保留和b中相同的元素
2、遍历元素
使用迭代器:Iterator
Iterator it = a.iterator();
while(it.hasNext()){
it.next();
}
for(Iterator it = a.iterator();it.hasNext();){
it.next();
}
8.2 List
1、特点:元素是有序的,可以重复,集合有索引
2、特有方法
add(index,element);指定位置添加元素
addAll(index,Collection);指定位置添加一个集合
remove(index);删除指定位置的元素
set(index,element);设置指定元素的值
get(index);获取指定位置的元素
indexOf();获取元素的位置
subList(from,to);截取集合了,包含from,不包含同
listIterator();列表迭代器,是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。所以在迭代时只能通过迭代器额方法操作元素,自由判断、去除和删除操作。
如果想要其他的操作,如添加、修改等,就需要使用其子接口Listiterator。
8.3 LinkedList
1、特有方法
addFirst();在头部添加元素
addLast();在尾部添加元素
getFirst();得到头部元素
getLast();得到尾部元素
removeFirst();取出并删除头部元素
removeLast();取出并删除尾部元素
其中get和remove在使用时,如果集合中没有元素,会出现NoSuchElementException。
2、在JDK1.6出现了替代方法
添加元素
offerFirst();
offerLast();
获取元素,如果集合中没有元素,会返回null;
peekFirst();
peekLast();
获取并删除元素,如果集合中没有元素,会返回null;
pollFirst();
pollLast();
8.4 Set
1、特点:元素是无序的,元素不可以重复
2、Set集合的功能和Collection是一致的
3、HashSet保证元素的唯一性:通过hashCode和equals是否为true
如果元素的hashCode值相同,才会判断equals是否为true。
如果元素的哈市Code值不相同,不会调用equals方法。
对于判断元素是否存在,以及添加和删除等操作,依赖的方法是元素的hashCode和equals方法。
8.5 泛型
JDK1.5版本之后出现的,用于解决安全问题,是一个安全机制,使用<>表示
ArrayList<String> a = new ArrayList<String>();
1、泛型类
当类中要操作的引用数据类型不确定的时候
class Utiles<TT>{
private TT t;
public void setTT(TT t){
this.t = t;
}
public TT getTT(){
return t;
}
}
静态方法不能访问泛型类,可以访问泛型方法。
2、泛型方法
public <T> void show(T t){
......;
}
3、泛型限定
ArrayList <? extends E>;
?表示通配符
可以接收E类型或者E的子类型,上限。
ArrayList <? super E>;
可以接收E类型或者E的父类型,下限。
8.6 Map
该集合存储键值对
HashTable:底层的数据结构使用的是哈希表,不可存入null键和null值,线程同步。
HashMap:底层的数据结构使用的是哈希表,可以使用null键和null值,线程不同步。
TreeMap:底层的数据结构使用的是二叉树,线程不同步。可以用于给map集合中的键进行排序。
1、方法:
添加
put(K key,V value);
putAll(Map<? extends K,? extends V> m);
删除
clear();
判断
containsKey(Object key);
containsValues(Object value);
isEmpty();
获取
get(Object key);
size();
values();
entrySet();
Set <Map.Entry<k,v>> entrySet;将map集合中的映射关系存放到set集合中,而这个关系的数据类型是Map.Entry。获取Map.Entry后,就可以通过其中的getKey和getValue方法获取关系中的键和值。
keySet();将所有的键存入到Set集合,因为Set具备迭代器,所以可以用迭代的方式去除所有的键,再根据Map的get方法,获取每一个键对应的值
8.7 集合框架的工具类
Collections.fill(List,Object);
可以将List集合中所有元素替换成指定的元素
Collections.repalceAll(List,oldValue,newValue);
将List集合中的旧值替换成新值。
Collections.reverse(List);
将List集合中的元素进行反转
8.8 高级for循环
格式:
for(数据类型 变量名 : 被遍历的集合或者数组){
}
只能获取元素,但是不能对集合进行操作。
8.9 可变参数
传递参数的时候使用...
public void show(int... arr){}
其中arr其实就是一个数组
8.10 静态导入
import static java.util.Arrays.*;
导入的是Arrays这个类中的所有静态成员。
本文出自 “java基础” 博客,请务必保留此出处http://8163413.blog.51cto.com/8153413/1713087
标签:集合
原文地址:http://8163413.blog.51cto.com/8153413/1713087