DAY7.1 Java核心基础
集合框架
Java 中很重要的一个知识点,实际开发中使用的频录较高,Java 程序中必备的模块
集合就是长度可以改变,可以保存任意数据类型的动态数组
最上层是一组接口,接下来是接口的实现类,第三层是对集合进行各种操作的工具类。
| 接口 | 描述 | 
|---|---|
| Collection | 集合框架最基本的接口,一个 Collection 可以存储一组无序、不唯一的对象 | 
| List | Collection 的子接口,存储一组有序、不唯一的对象 | 
| Set | Collection 的子接口,存储一组无序、唯一的对象 | 
| Map | 独立于 Collection 的另外一个接口,存储一组键值对象、提供键到值的映射 | 
| Iterator | 输出集合元素的接口,一般适用于无序集合,从前到后单向输出 | 
| ListIterator | Iterator 的子接口,可以双向输出集合中的元素 | 
| Enumeration | 传统的输出接口,已被 Iterator 所取代 | 
| SortedSet | Set 的子接口,可以对集合中的元素进行排序 | 
| SortedMap | Map 的子接口,可以对集合中的键值元素进行排序 | 
| Queue | 队列接口,实现队列操作 | 
| Map.Entry | Map 的内部接口,描述 Map 中的一个键值对元素 | 
Collection接口
集合中最基础的父接口,存放无序、不唯一的对象,一般不用,不能被实例化,只能来规范定义
Collection常用的方法:
| 方法 | 描述 | 
|---|---|
| int size() | 获取集合长度 | 
| boolean isEmpty() | 判断集合是否为空 | 
| boolean contains(Object o) | 判断集合中是否存在某个对象 | 
| Iterator iterator() | 实例化 Iterator 接口,遍历集合 | 
| Object[] toArray() | 将集合转换为一个 Object 类型的对象数组 | 
| boolean add(E e) | 向集合中添加元素 | 
| boolean remove(Object o) | 从集合中移除元素 | 
| boolean containsAll(Collection c) | 判断集合中是否存在某个集合的所有元素 | 
| boolean addAll(Collection c) | 向集合中添加某个集合的所有元素 | 
| boolean removeAll(Collection c) | 从集合中移除某个集合中的所有元素 | 
| void clear() | 清除集合中的所有元素 | 
| boolean equals(Object o) | 判断两个集合是否相等 | 
| int hashCode() | 获取集合的散列值 | 
Collection 子接口
list:存放有序 、不唯一的元素
set:存放无序、唯一的元素
Queue:队列接口
list
在Collection接口上进行扩展
| 方法 | 描述 | 
|---|---|
| E get(int index) | 通过下标获取指定位置的元素 | 
| E set(int index,E element) | 替换集合中指定位置的元素 | 
| void add(int index,E element) | 向集合中指定位置添加元素 | 
| E remove(int index) | 通过下标删除集合中指定位置的元素 | 
| int indexOf(Object o) | 查找某个对象在集合中的位置 | 
| int lastIndexOf(Objec o) | 从后向前查找某个对象在集合中的位置 | 
| ListIterator listIterator() | 实例化 ListIterator 接口 | 
| List subList(int index1,int index2) | 获取集合中的子集合(左闭右开) | 
List 接口的实现类
ArrayList 是最常用的 List 接口实现类
示例代码:
public static void main(String[] args) {
    ArrayList<Object> list = new ArrayList<>();
    list.add("java");
    list.add("javaSE");
    list.add("javaEE");
    list.add("spring");
    System.out.println("测试get获取方法");
    System.out.println(list.get(0));
    System.out.println("\n测试set替换方法");
    list.set(0, "shuwu");
    System.out.println("替换后的值为");
    System.out.println(list.get(0));
    System.out.println("\n测试remove移除方法");
    list.remove(0);
    System.out.println("当前数组元素:");
    System.out.println(list);
    System.out.println("\n测试indexOf移除方法");
    System.out.println("javaEE的位置index:"+list.indexOf("javaEE"));
    System.out.println("\n测试lastIndexOf方法");
    System.out.println("spring的位置index:"+list.lastIndexOf("spring"));
    System.out.println("\n测试迭代器输出数组..");
    System.out.println("数组长度为:"+list.size());
    ListIterator<Object> iterator = list.listIterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }
    System.out.println("\n测试subList方法");
    List<Object> objects = list.subList(0, 2);
    System.out.println("新数组:"+objects.toString());
}
 
输出:

Set 接口
Set 是 Collection 的子接口,Set 接口以散列的形式存储数据,所以元素没有顺序,可以存储一组无序且唯一的对象
Set 接口的实现类
HashSet 是开发中经常使用的实现类,存储一组无序且唯一的对象,无序是指元素的存储顺序和遍历顺序不一致
public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add("Hello");
    set.add("World");
    set.add("Java");
    set.add("Hello");
    System.out.println(set.size());
    Iterator iterator = set.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
    set.remove("World");
    System.out.println("删除之后的遍历");
    iterator = set.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
}
 

LinkedHashSet 是 Set 的另外一个子接口,可以存储一组有序且唯一的元素,有序是指元素的存储顺序和遍历顺序一致
public static void main(String[] args) {
    LinkedHashSet set = new LinkedHashSet();
    set.add("Hello");
    set.add("World");
    set.add("Java");
    set.add("Hello");
    System.out.println(set.size());
    Iterator iterator = set.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
    }
    set.remove("World");
    System.out.println("删除之后遍历集合");
    iterator = set.iterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }
}
 
输出:

如果我们要让在set存入对象的时候会判断set集合里面是否有这个元素(对象)
public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add(new A(1));
    set.add(new A(1));
    System.out.println(set);
}
 
怎么实现set集合里面只保存一个呢?
那如何判断两个对象是否相等呢,首先调用 hashCode 方法,如果 hashCode 的值不一样,则直接可以判定两个对象不相等,如果 hashCode 的值相等,再通过 equals 方法来判断两个对象是否相等。
所以我们要重写hashCode 方法和equals 方法
@Override
public int hashCode() {
    return num;
}
@Override
public boolean equals(Object obj) {
    A a = (A) obj;
    return a.num == this.num;
}
 
重写后set集合里面只有一个对象啦




















