概述
------- android培训、java培训、期待与您交流! ----------
1.概述:
1.集合框架:
集合用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection
|---- List:元素有序,可以重复
|---- ArrayList:底层的数据结构使用的是数组结构。特点:查询,修改速度快,增删慢。
|---- LinkedList:底层的数据结构是链表结构。特点:查询,修改慢,增删快。
|---- Vector:底层是数组数据结构。线程同步,被ArrayList替代。(特有取出方式:Enumeration枚举)
|---- Set: 元素无序,不可重复
|---- HashSet:底层数据结构是哈希表
|----- TreeSet: 底层结构是二叉树,可以对Set集合中的元素进行排序
每个容器对数据的存储方式都不同,即数据结构不同。
2.集合共性方法:
add()方法的参数类型是Object,以便于接收任意类型的对象。集合存储的都是对象的引用(地址)。
remove() 删除元素并返回。
clear() 删除所有元素。
contains() 判断是否包含指定字符串。
isEmpty() 判断集合是否为空,为空返回true。
retainAll() 取交集,保留与指定的集合相同的元素
removeAll() 去掉与指定集合相同的元素
3.迭代器:iterator 集合的取出元素的方式。不可以通过集合对象的方法操作集合中的元素,只能进行判断,取出,删除。添加,修改需要其子接口ListIterator()中的listIterator()方法。
2.List:元素师有序的,元素可以重复。判断元素是否相同,依据元素的equals方法。
1.共性方法:add(index, element) 指定位置添加元素
addAll(index,Collection) 添加指定集合中所有元素到结尾
remove(index) 删除指定位置元素
set(index,element) 修改指定位置元素
get(index) 获取指定位置元素
subList(from,to) 返回指定位置的的List,包含头不含尾。
ListIterator() List特有迭代器,元素进行添加,修改,判断,取出,删除的操作。
2.LinkedList:
(6.0JDK替代方法)
特有方法:addFirst(): 头部添加元素 offerFirst ()
addLast(): 尾部添加元素 offerLast()
getFirst(): 获取头部元素 peekFirst()
getLast(): 获取尾部元素 peekLat()
removeFirst(): 获取并删除头部元素 pollFirst()
removeLast(): 获取并删除尾部元素, pollLast()
特有迭代器:ListItertor.
3.HashSet:功能和Collection相同。
保证元素唯一性的方式是通过元素的两个方法hashcode和equals来完成,元素的hashcode相同才会去判断equals是否 为true,元素的hashcode值不同,不会调用equals。
判断元素是否存在,以及删除等操作,依赖的方法时元素的hashcode和equals方法。
4.TreeSet:
保证元素唯一性的依据是compareTo方法return 0.
TrerSet排序的第一种方式:让元素自身据别比较性,元素需要实现Comparable接口,覆盖compareTo方法,不覆盖是 默认顺序。
TreeSet的第二种排序方式:当元素不具备比较性时,或具备的比较性不是所需要,这时需要让集合自身具备比较性。
定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
5.泛型:用于解决安全问题,是一个安全机制。允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量, 创建 对象、调用方法时动态地指定。
1.好处:1将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员解决问题,让运行时期问题减 少, 安全。2.避免强制转换。
2.泛型格式:通过<>来定义要操作的引用数据类型。例:List<String> strList = new ArrayList<String>();
3.泛型类:class Test<T> 当类中要操作的引用数据类型不确定时可以定义泛型类。在整个类中有效。被方法使用,泛 型类对象明确要操作的具体类型后,所有操作的类型就固定。
4.泛型方法:让不同方法可以操作不同类型,类型不确定时可以定义泛型方法。
5。泛型接口:interface Inter<T> {void show(T t)}
6.泛型限定:通配符:?。
?extends E:可以接受E类型或者E类型的子类型(上限)。
?super E:可以接受E类型或者E的父类型(下限)。
6.Map:存储键值对。一对一对的存,而且要保证键的唯一。
Hashtable:底层是哈希表数据结构,不可存入null键null值。该集合是线程同步,jdk1.0效率低。
HashMap:底层是哈希表数据结构,允许使用null键(唯一)和null值,线程不同步,jdk1.2效率高,取代Hashtable
TreeMap:底层是二叉树数据结构,线程不同步,可以用于Map集合中的键进行排序。
1.操作方法:put (K key, V value) ; putAll(Map<?extends K, ? extend V> m) 添加
clear(); remove(Objectkey) 删除
containsValue(Object value); containsKey(Object key); isEmpty(); 判断
get(Object key); size(); values(); entrySet(); keySet() 获取
2.两种取出方式:
1.Set<k> keySet: 将map中所有的键存入到Set集合。通过迭代器方式取出所有的键,根据键取值。
Map<String ,String> map = new HashMap<String, String>();
map.put("02","zdfsd"); ...........
Set<String> keySet = map.keySet();
Iterator<String> it = keySet.iterator();
while(it.hasNext()){String key = it.next(); String value = map.get(key);}
2.Set<Map.Entry<k,v>>entrySet: 将map中的映射关系存入到set集合,可以取出键和值。
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map<String, String>> it = entrySet.iterator();
while(it.hasNext()){
Map.Entry<String, String> me = it.next();
String key = me.getKey();
String value = me.getValue();
}
7.Collections:对集合进行操作的工具类。 全是静态方法。
1.static voidsort(List list): 根据元素的自然顺序对指定的List集合的元素按升序进行排序。
2.staticObject max(Collection coll): 根据元素的自然顺序,返回给指定集合中的最大元素。
3.static int binarySearch(List list, Object key): 二分搜索指定的集合,获得指定对象的索引。
4.static voidrevers(List list): 反转指定List集合中的元素的顺序。
5.同步控制
提供了synchronizedXxx()方法,该方法可以将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程 安全问题。
6.设置不可变集合。
emptyXxx():返回空的、不可变的集合对象。
singletonXxx():返回只包含指定的,不可变的集合对象。
unmodifiableXxx(): 返回指定集合对象的不可变视图。
8.Arrays:操作数组的工具类。
将数组变成集合,用集合的思想和方法操作数组中的元素。不可以使用集合中的增删操作,否则出现U你supportOperationException。如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
String[] arr = {"fa", "fff"};
List<String> list = Arrays.asList(arr);
9.集合转成数组:限定对元素的操作。最后
以上就是迷人摩托为你收集整理的黑马程序员------java学习笔记之集合的全部内容,希望文章能够帮你解决黑马程序员------java学习笔记之集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复