本帖最后由 风中的消逝 于 2018-4-23 15:11 编辑
【石家庄校区】就业班_JavaSE_day06-day07_集合
一 Collection
1 根接口
2 子接口 List Set
3.方法
增删
boolean add(E e) 添加一个元素
boolean addAll(Collection<? extends E> c) 添加全部
boolean remove(Object o) 删除某元素
boolean removeAll(Collection<?> c) 把二个集合相同的元素删除,作用于前面的调用的集合
void clear()
boolean retainAll(Collection<?> c) 把二个集合不同的元素删除,作用于前面的调用的集合
遍历
Iterator<E> iterator() 迭代器遍历
判断
boolean isEmpty()
boolean contains(Object o) 包含某个元素
boolean containsAll(Collection<?> c) 包含全部 返回是否包含全部
长度
int size()
二 Iterator 迭代器接口
迭代器相当于集合的一个副本,在迭代的时候如果集合的长度发生改变,则会报并发修改异常 (ConcurrentModificationException)
hasNext()
next()
remove()
ListIterator 列表迭代器接口
add()
使用注意:对集合的增删操作要么都用迭代器完成,要么都用集合自身的方法完成。这样可以避免并发修改异常。
三 Set
1.接口 extends Collection
2.特点 无序(元素放进去和拿出来的顺序不一致) 不重复
3.实现类
HashSet 底层数据结构是哈希表 (无序 不重复)
TreeSet 底层数据结构是红黑树 (可以对集合排序,不重复)
LinkedHashSet 底层数据结构是链表 + 哈希表 (有序,不重复)
哈希表:数组和链表的优点集合。类似于字典 字典的索引相当于数组 每页的内容相当于链表
红黑树:自平衡二叉树 左边 < 中间 < 右边
HashSet 怎样保证元素的不重复 通过元素的hashcode和equals方式来判断是否是同一元素
TreeSet 怎样保证元素有序和不重复。 有二中方式:
1.自然排序 元素要实现comparable接口并重写compareTo方法。 像Integer 、String 这些已经实现了该接口
2.比较器 通过带参数构造方式传入比较器对象 来比较元素。通常采用匿名内部类。
4. 方法
没有特殊方法,与Collect方法相同
四 List
1.接口 extends Collection
2.特点 有序(元素放进去和拿出来的顺序一致) 可以重复
3.实现类
ArrayList 底层数据结构是数组 查询块,增删慢 线程不安全,效率高
LinkedList 底层数据结构是链表 查询慢, 增删块 线程不安全,效率高
LinkedList 有一些特殊方法(Frist和Last)
void addFirst(E e) void addLast(E e)
E getFirst() E getLast()
E removeFirst() E removeLast()
Vector 底层数据结构是数组 查询快,增删慢,线程安全,效率低 不常用
4 方法
有特殊方法,带index索引的特殊方法
void add(int index, E element)
boolean addAll(int index, Collection<? extends E> c)
E get(int index)
int indexOf(Object o)
int lastIndexOf(Object o)
E remove(int index)
E set(int index, E element)
五 Map
1 Map与Collection区别
map存储的是二列, collection存储的是一列
map中的key不能重复,collection的set 不能重复
map是以key作为底层数据结构 collection是以元素作为底层数据结构
2 Map方法
添加功能
V put(K key, V value)
如果key是第一次添加则返回null 如果key是第二次添加,则把以前的value替换,并将被替换的value返回。
所以说put除了添加还有替换的功能
删除功能
void clear() 全部清空
V remove(Object key) 根据key删除, 返回被删除键值对的value
判断功能
boolean containsKey(Object key) 是否包含key
boolean containsValue(Object value) 是否包含value
boolean isEmpty() 是否为空
获取 二种遍历方式
1.Set<Map.Entry<K,V>> entrySet() 获取键值对set 然后通过getKey和getvalue方法获取key和value
2.Set<K> keySet() 获取所有key V get(Object key) 根据key获取value
Collection<V> values() 获取所有value
长度功能
int size()
3.实现类
HashMap key的存储和取出顺序 无序。
LinkedHashMap key有序的hashmap key的存储和取出顺序 有序。
TreeMap 大小顺序有序
HashMap和Hashtable的区别
HashMap是线程不安全的,key和value允许为空
Hashtable是线程安全的, key和value不允许为空
六 Collections 工具类
binarySearch(List,obj) list必须先有序才行
copy(dest,src) 赋值是 dest的size 要大于等于src的size
fill(list,obj)
reverse()
sort(list) 自然排序 comparable compareTo()
shuffle() 混排
七 泛型
定义在类上、定义在接口上。class A<T>{} interface<T>{}
不能定义 class A<? extend T> {} 或者 class A<? super T>
接口类似。因为? extend T 类型不确定。
定义在方法形参上 或者 方法的返回值上。
method(T t) <A> void method( A a) <T> void method<T t>
方法可以用类上或接口上定义的类型。也可以自定义类型。
另外方法的形参和返回值 可以使用<? extend T> 这个的目的是方便代码重构。
八 增加for
Iterable 接口 增强for接口 底层实现原理就是迭代器 只能用来遍历
九 数据结构
数组 查询快 增删慢 连续内存空间
链表 查询慢 增删快 不连续内存空间
栈 先进后出
队列 先进先出
十 可变参数 ...
相当于数组。可以通过遍历数组都到参数。
|