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集合里面只有一个对象啦