文章目录
- `在实际的开发过程中, List集合接口的使用比率可以达到 Collection 系列的 80%, 在进行集合处理的时候, 优先考虑 List 集合接口.`
- 在这个List接口里面有两个重要的扩充方法:
- ArrayList 子类 (90% 使用)
- 范例: 观察List 基本操作
- 范例: 观察 List 的 get() 操作
- 注意:
- 范例: 通过 Collection 进行输出处理 (`Collection 可没有 get() 方法` )
- List 与 简单Java 类
- 范例: 向集合保存简单 java类对象
- 注意: 对于集合中的 contains(), remove() 必须在该类中有 equals() 的支持
在实际的开发过程中, List集合接口的使用比率可以达到 Collection 系列的 80%, 在进行集合处理的时候, 优先考虑 List 集合接口.
在这个List接口里面有两个重要的扩充方法:
public E get(int index) // 根据索引取得保存数据
public E set(int index, E element) // 修改数据
List 子接口与 Collection 接口相比最大的特点在于, 其有一个 get() 方法, 可以根据索引取得内容. 但是 List 本身还属于一个接口, 要想取得接口的实例化对象, 就必须有子类, 在 List 接口下有 三个常用子类:
- ArrayList
- Vector
- LinkedList
最终的操作还是应该以接口为主, 那么既然要以接口为主则只参考接口的定义即可.
ArrayList 子类 (90% 使用)
ArrayList 是一个针对于 list 接口的数组操作实现, 那么下面首先利用 ArrayList 做基本操作
范例: 观察List 基本操作
package com.beyond.dhl;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 此时的集合里面只允许保存 String数据类型
all.add("Hello");
all.add("Hello"); // 重复数据
all.add("Hello");
System.out.println(all);
}
}
通过此时的观察可以得到证实: List 允许保存有重复数据
package com.beyond.dhl;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 此时的集合里面只允许保存 String数据类型
System.out.println(all.size() + ", " + all.isEmpty());
all.add("Hello");
all.add("Hello"); // 重复数据
all.add("World");
all.remove("Hello");
System.out.println(all.size() + ", " + all.isEmpty());
System.out.println(all.contains("heoo") + "," + all.contains("World"));
System.out.println(all);
System.out.println(Math.round(-15.61));
}
}
范例: 观察 List 的 get() 操作
package com.beyond.dhl;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 此时的集合里面只允许保存 String数据类型
all.add("Hello");
all.add("Hello"); // 重复数据
all.add("World");
for (int x = 0; x < all.size() ; x++) {
System.out.println(all.get(x));
}
}
}
注意:
get() 方法是 List子接口的, 如果现在你使用的不是 List 而是Collection
(虽然这种情况大多数不会发生), 那么对于此时的数据取出你只能够将集合变成对象数组来操作了.
操作结果以 Object形式返回, 那么就有可能需要向下转型, 那么就有可能造成 ClassCastException 安全隐患
范例: 通过 Collection 进行输出处理 (Collection 可没有 get() 方法
)
package com.beyond.dhl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
Collection<String> all = new ArrayList<String>(); // 此时的集合里面只允许保存 String数据类型
all.add("Hello");
all.add("Hello"); // 重复数据
all.add("World");
// 操作以 Object形式返回, 那么就有可能需要向下转型 (不转的话可以通过反射实现), 那么就有可能造成 ClassCastException 安全隐患
Object[] result = all.toArray(); // 变为Object 对象数组
System.out.println(Arrays.toString(result));
}
}
此类型的操作在开发中尽量回避, 所写的代码不到万不得已(一半不会出现), 不要使用 Collection.
List 与 简单Java 类
Integer 可以操作空, 而 int只有 0 和数字
在实际的开发之中, 集合中保存最多的数据类型就是简单 Java 类. 所以下面针对简单java类的操作做一个说明.
范例: 向集合保存简单 java类对象
package com.beyond.dhl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
class Persion{
private String name;
private Integer age; // Integer 可以操作空, 而 int只有 0 和数字
public Persion(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Persion)) {
return false;
}
Persion per = (Persion) obj; // 这个地方可以向下转型
return this.name.equals(per.name) && this.age.equals(per.age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Persion [name=" + name + ", age=" + age + "]";
}
}
public class TestDemo {
public static void main(String[] args) {
List<Persion> all = new ArrayList<Persion>();
all.add(new Persion("张三", 10));
all.add(new Persion("张四", 11));
all.add(new Persion("张五", 12));
// 对于集合中的 contains(), remove() 必须在该类中有 equals() 的支持
System.out.println(all.contains(new Persion("张五", 12)));
System.out.println(all.remove(new Persion("张五", 12)));
for (int x = 0; x < all.size(); x++) {
System.out.println(all.get(x));
}
}
}
注意: 对于集合中的 contains(), remove() 必须在该类中有 equals() 的支持
从理论上讲 contains(), remove() 需要 equals() 支持, 但是实际上我们很少有人真去这么做, 也就是说 简单java 类中出现 equals() 方法的机率是很低的