list和set以及其子类
************ java.util.List子接口, 特点:
* 1. 有序, 也就是存储和取出的顺序一致.
* 2. 有索引, 也就是具体的角标
* 3. 可以存储重复的元素.
*
* List接口中常见的实现类: ArrayList, LinkedList, Vector;
*
* 成员方法:
* 添加元素:
* public boolean add(E e);
* public boolean add(int index, E e);
*
* 删除元素:
* public boolean remove(E e);
*
* 修改元素:
* public E set(int index , E e);
*
* 查询:
* public E get(int index);
* public int size();
************ LinkedList是List接口的实现类
* 特点:
* 1. 完全符合List接口的特点, 有序,有索引,可以存储重复元素
* 2. 底层是维护了一个链表, 增删速度快,查询速度慢
* 3. 线程不安全,效率高
*
* 额外添加了一些和头尾相关的方法:
1. public void addFirst(E e);//添加元素在开头位置
2. public void addLast(E e);// 添加元素在结尾位置
3. public E getFirst();// 获取开头位置元素
4. public E getLast();// 获取结尾位置元素
5. public E removeFirst();// 移除开头位置元素
6. public E removeLast();// 移除结尾位置元素
7. public E pop();// 弹出开头位置元素
8. public void push(E e);// 压入开头位置元素
9. public boolean isEmpty();// 判断集合是否为空
* ***********java.uitl.Set接口是Collection子接口;
* 特点:
* 1. 无序的, 存储和取出的顺序不能保证
* 2. 无索引
* 4. 不能存储重复元素 (存储的元素必须覆盖了equals方法和hashCode);
*
* Set接口中常见实现类: HashSet, LinkedHashSet
*
* 注意点:
* 由于Set集合没有索引,不能使用普通for循环
* 只能使用,增强for, 和迭代器遍历!
*********** HashSet,是Set接口的实现类,特点:
* 1. 完全符合Set接口的特点, 无序,无索引,存储元素不重复
* 2. 底层维护的是一个hash表, 只要使用hash表实现的地方都可以提高性能.
* 3. 线程不安全, 效率高.
**************hashCode方法,是Object中的一个方法;
* public int hashCode();
*
* 所以所有对象都可以调用hashCode方法,获取对象的哈希值.
*
* 注意点
* 1. 哈希值并不是地址值, 在java中是看不到对象的真正地址值的, 地址值的计算仅用到了哈希值而已.
* 2. 对于引用数据类型来讲, == 确实比较的是地址值.
********** 在HashSet中的底层实现,是维护了一种hash表, hash表的本质也是一个数组.
* 哈希表: 是一种数据结构, 他的计算依赖于哈希值
* 哈希值: 通过一定的算法计算出来的.
*
* hashSet中存储内容的时候,之所以去除重复的元素,依赖于hashCode(哈希值), equals
*********** 使用HashSet存储JDK中提供的数据String,如何去除重复的元素
* 因为: String类中已经覆盖了hashCode方法和equals方法
*
* 使用HashSet存储自定义数据Person对象,如何去除重复的元素
* 如果自定义的类,需要去除重复的元素根据具体的内容,也需要重写Object中的hashCode方法和equals方法
* 快捷键: alt + shift + s 按 h 自动生成即可
*
* 如果要将一个十进制的整数转成16进制,使用Integer中的, toHexString(int i)
********** java.util.LinkedHashSet是Set接口的一个实现类;
* 特点:
* 1. 有序, 存储和取出的顺序是一致的.
* 2. 无索引
* 3. 存储元素不能重复(需要存储的元素,已经覆盖了hashCode和equals方法)
*
* 注意点:
* 父类中没有某种功能,不代表子类一定不能有.
* LinkedHashSet虽然实现了Set接口,但是它能够保证有序.
************** ArrayList注意点: add方法, contains方法
* public boolean contains(E e)
* 依赖于hashCode和equals方法
* ArrayList可以存储重复的元素, 因为ArrayList中的add方法并没有依赖于hashCode和equals方法
* ArrayList中的Contains, 依赖了hashCode和equals方法,判断哈希值和内容判断是否有这个元素.
* 只要是Arraylist的add方法,一定返回true
*
*
* HashSet注意点, add方法, contains方法
* 两个方法都依赖了HashCode和Equals方法.
*
* HashSet特点:
* 1. 无序,无索引,不能添加重复元素(add)