Collection集合总结
来源:互联网 发布:纸带打孔编程 编辑:程序博客网 时间:2024/05/16 18:42
综述(java提供多种集合类)
- 数据结构不同
- 共性(存储,获取,判断)
- 不断向上提取,得到一个集合的继承体系结构图
分析:从具体到抽象
实现:从抽象到具体
使用:使用具体的
Collection常用功能(顶层接口)
注:接口不能实例化,需要用其子类的子类(由于List Set也是接口)实例化。
- 添加功能
boolean add(Object obj) 添加一个元素boolean addAll(Collection c) 添加一个集合的元素
- 删除功能
void clear() 移除所有的元素boolean remove(Object obj) 移除一个元素boolean removeAll(Collection c) 移除一个集合的元素,有一元素被移除就返回true
- 判断功能
boolean contains(Object obj) 判断集合中是否包含指定的元素boolean containsAll(Collection c) 判断集合中是否包含指定的集合元素,全部包含返回trueboolean isEmpty() 判断集合是否为空
- 获取功能
Iterator<E> iterator() 迭代器,集合的专用遍历方式 Object next() 获取元素,并移动到下一个位置 boolean hasNext() 如果仍有元素可以迭代,则返回true
- 长度功能
int size() 元素的个数//数组没有length()方法;字符串有length()方法;集合没有length()方法;
- 交集功能
boolean retainAll(Collection c) 两个集合都有的元素//A,B两个集合做交集,最终结果保存在A中,B不变,返回值表示的是A是否发生过改变
- 把集合返回数组
Object[] toArray()
List特有的常用功能
- 有序(存储和取出的元素一致)
- 可重复的
List的子类特点
1. ArrayList:底层数据结构是数组,查询快,增删慢;线程不安全,效率高
2. Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低
3. LinkedList:底层数据结构是链表,查询慢,增删快;线程不安全,效率高
- 添加功能
void add(int index,Object element) 在指定位置添加元素
- 获取功能
Object get(int index) 获取指定位置的元素//可用于List特有遍历功能,size()和get()方法的结合
- 列表迭代器
ListIterator listIterator() List集合特有的迭代器 特有功能: Object previous() boolean hasPrevious() //ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用
- 删除功能
Object remove(int index) 根据索引删除元素,返回被删除的元素
- 修改功能
Object set(int index,Object element) 根据索引修改元素,返回被修改的元素
子类 LinkedList特有功能
- 添加功能
public void addFirst(Object e)public void addLast(Object e)
- 获取功能
public Object getFirst()public Object getLast()
- 删除功能
public Object removeFirst()public Object removeLast()
Set的特点(方法类与前面的类似)
- 无序(存储顺序和取出的顺序不一致)
- 元素唯一
HashSet:
问题:为什么HashSet存储字符串的时候,字符串内容相同的只存储了一个呢?
答:通过查看add方法的源码,我们知道了这个方法底层依赖两个方法:hashCode()和equals()
步骤:先看hashCode()值是否相同
1如果相同,继续走equals()方法,返回true:说明元素重复,就不添加;返回false:说明元素不重复,就添加到集合中
2如果不同,就直接添加到集合中
(如果类没有重写这两个方法,默认使用Object(),一般来说不同,而String类重写了hashCode()和equals()方法,所以它就可以把内容相同的字符串去掉,只留下一个)
LinkedHashSet:(HashSet的子类)
底层数据结构由哈希表和链表组成
- 哈希表保证元素的唯一性
- 链表保证元素有序(存储和取出是一致)
TreeSet:
底层是二叉树结构(红黑树是一种自平衡的二叉树)
1元素是如何存进去的?
第一个元素存储的时候,直接作为根节点存储;
第二个元素开始,每个元素从根节点开始比较,大就作为右儿子,小就作为左儿子,相等就不搭理他(即不存)
2元素是如何取出的?
前序遍历,中序遍历,后序遍历
能够对元素按照某种规则排序,排序有两种方法
- 自然排序(元素具备比较性)
(无参构造,存储元素所属的类实现Comparable<>接口)
- 比较器排序(集合具备比较性)
(构造函数new一个自己的比较器,比较器实现Comparator<>接口,即让集合的构造方法接收一个比较器接口的子类对象Comparator)
通过观察TreeSet的add()方法,最终要看TreeMap的put()方法
真正的比较是依赖于元素的compareTo()方法,而这个方法是定义在Comparable里面的,所以想要重写该方法,就必须实现Comparable接口,这个接口表示的就是自然排序
Collection和Collections的区别?
Collection:单列集合的顶层接口,有子接口List和Set
Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
public static <T> void sort(List<T> list) 排序,默认情况下是自然排序public static <T> int binarySearch(List<?> list,T key) 二分查找public static <T> T max(Collection<?> coll) 最大值public static void reverse(List<?> list) 反转public static void shuffle(List<?> list) 随机置换
- 集合框架-Collection总结
- Collection集合总结
- 集合collection总结
- Collection集合总结
- Collection集合总结
- Java集合Collection总结
- Collection集合总结
- Java-Collection集合总结
- Collection集合总结
- Java集合Collection总结
- Collection集合总结
- 集合框架-Collection集合总结
- Java Collection Java集合总结
- java 集合 collection内容总结
- JavaSE总结 -集合框架collection
- java 集合总结(Collection)
- 集合( LinkedList,HashSet,Collection ) 总结
- 集合框架_对象数组、集合(Collection)、集合(List)总结
- 轻量级框架-没有侵入性
- sql三表级联多条件模糊查询
- java FinalClass String 相关的用法
- 第30章 抽样信号的工程应用
- 软件工程概述
- Collection集合总结
- JS变量的定义及JS的命名规范
- CodeChef Protecting The Poison(贪心)
- 2013计算机视觉代码合集一
- C++学习(27)
- 数字图像处理——用Java获取像素点的RGB值
- cookie和session的区别
- JAVA并发编程从入门到精通-第一章
- 1、jQuery入门(Head First笔记)