- 集合
所谓集合指的就是一套动态对象数组,在实际开发中数组的概念的一定会使用的,但是数组的问题是一旦开辟空间则长度不可改变
其实就是对数据结构的一种封装,用户不用去编写,直接使用。 由于数据结构开发起来比较困难,还必须考虑性能问题
3.1 集合中需要掌握的核心接口
Collection List Set Map Iterator (了解) Enumeration Queue
3.2 List接口
List接口的定义:
public interface List<E> extends Collection<E> |
通过观察List接口的定义其继承的是Collection 接口
通过观察接口之间的关系,可以得出上图
观察Collection常用方法
1 public boolean add(E e); 增加元素到集合
2 public boolean addAll(Collection<? extends E> c); 存放一个集合
3 public boolean contains(Object o); 查找集合中的元素
4 public boolean isEmpty() ; 判断一个集合是否为空
5 public boolean remove(Object o) 删除一个集合中的元素
6 public int size(); 返回集合中的长度
观察List接口中的方法
List扩展Collection中的方法
1public E get(int index); 根据指定索引取得元素
2 public E set(int index, E element) ; 替换元素, index要替换元素下标 element要替换的元素
3 public ListIterator<E> listIterator() List自己的迭代器
List接口的特点: 可重复的, 有序的
使用List list本身是一个接口,如果想要使用一个接口则可以使用该接口的实现类完成
List下面的实现类:
需要掌握的实现类 : ArrayList LindkedList Vector
范例: 使用List 接口
public static void main(String[] args) { // 泛型的使用中 只能使用类 基本数据类型不行
List<Integer> array=new ArrayList<>();
array.add(4); //赋值
array.add(3);
array.add(3);
array.add(1);
for(int i=0;i<array.size();i++) {
System.out.println(array.get(i)); //通过get取值 } } |
通过使用ArrayList发现 其特点是 可重复的,并且有序的,顺序就存储时候的顺序
通过一个 add 增加元素到集合 通过get(index) 取出集合中的元素 下标的位置从0开始
观察其中的一些其他的操作方法:
1 判断集合是否为空 pulic boolean isEmpty();
2 取得集合中的长度 pulic int size();
3 删除集合中的元素 public boolean remove(Object obj);
public static void main(String[] args) { // 泛型的使用中 只能使用类 基本数据类型不行
List<Integer> array=new ArrayList<>();
System.out.println("&&&&&"+array.isEmpty());
array.add(4); //赋值
array.add(3);
array.add(3);
System.out.println(array.remove(1)); array.add(1); System.out.println(array.isEmpty());
System.out.println(array); } |
通过观察源码发现ArrayList 是一个对象数组, 每次增加的时候 会为数组扩容,数组长度是不能改变的,每次扩容数组内容拷贝的工作 ,ArrayList如果频繁增加内容,效率不高, 但是查询的时候由于底层使用的是数组,所以查询效率会高
面试题:
ArrayList保存自定义类:
首先观察使用系统自定义的类完成ArrayList类的添加
public static void main(String[] args) { // 泛型的使用中 只能使用类 基本数据类型不行
List<String> array=new ArrayList<>();
array.add("A");
array.add("B");
array.add("C");
System.out.println(array.contains("C")); for(String s:array) {
System.out.println(s); }
} |
以上使用的类 为系统自定义的String类 其类功能已经非常完善了,现在使用用户自定义的类完成ArrayList的添加
范例:实现自定义类
package org.list;
public class Person {
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override //new Person("张三",20) public boolean equals(Object obj) { // 传进来要比较的内容 // TODO Auto-generated method stub
Person per=null; if(obj instanceof Person) {
per=(Person)obj; // Object 向下转型 为 Person类型 } // this 当前的对象 Person 和 传进来的Person比较 if(this==per) { //内存地址 一样肯定是同样对象
return true; }
if(this.age==per.age&&this.name.equals(per.name)) {
return true; }
return false; }
}
|
通过代码,发现自定义类的时候,必须覆写equals方法才能完成集合中 对象查找和删除,主要原因是在于进行对象删除或者查找的时候 集合中会判断传入的元素和集合本身的元素是否是内容相同的元素 只有相同才会删除或者查找