学习的第23天。
总结:
集合:
Collection 体系集合:
Collection 父接口:该体系结构的根接口,代表一组对象,称为“集合”,每个对象都是该集合的“元素”。
代表一组任意类型的对象
List 接口的特点:有序、有下标、元素可重复
Set 接口的特点:无序、无下标、元素不可重复
List 子接口:有序、有下标、元素可重复
继承了父类接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法。
List 实现类:
ArrayList(JDK1.2版本出现):
JDK 8 的ArrayList ,实际初始长度是0。 首次添加元素时,需要实际分配数组空间,执行数组扩容操作。
数组结构存储(线性表),查询快,增删慢。线程不安全、效率相对快
Vector(JDK1.0版本出现):
数组结构存储(线性表),查询快,增删慢。线程安全、效率相对慢
LinkedList:
链表结构实现,增删快,查询慢 Queue、栈结构、队列结构
习题:
C10.2: 有如下代码:
import java.util.*;
public class TestList{
public static void main(String[] args){
List<String> list=new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add(1,"Learn");
list.add(1,"Java");
printList(list);
}
public static void printList(List list){
//1
}
}
把//1处的代码补充完整,要求输出list中所有元素的内容:
System.out.println(list);
写出程序执行的结果:
[Hello, Java, Learn, World]
如果要把实现类由ArrayList换为LinkedList,应该改哪里?ArrayList 和 LinkedList 使用上有什么区别?实现上有什么区别?
List<String> list=new LinkedList<String>();
ArrayList 查询快,增删慢; LinkedList 查询慢,增删快; LinkedList 直接插入;ArrayList创建新的
如果要把实现类由ArrayList换为Vector,应该改哪里?ArrayList 和 Vector 使用上有什么区别?实现上有什么区别?
List<String> list=new Vector<String>();
ArrayList 速度快,安全差; Vector反之; 没区别
C10.3: 写出程序执行的结果:
import java.util.*;
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Hello");
list.add("Learn");
list.remove("Hello");
list.remove(0);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
Hello
Learn
C10.5 有如下代码:
public class Worker {
private int age;
private String name;
private double salary;
public Worker(){}
public Worker(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void work(){
System.out.println(name+" work");
}
}
创建一个List:
import java.util.ArrayList;
import java.util.List;
public class test5 {
public static void main(String[] args) {
List<Worker> list=new ArrayList<Worker>();
list.add(new Worker("zhang3",18,3000));
list.add(new Worker("li4",25,3500));
list.add(new Worker("wang5",22,3200));
}
}
在li4之前插入一个工人,信息为:姓名zhao6,年龄24,工资3300 :
public class test5 {
public static void main(String[] args) {
List<Worker> list=new ArrayList<Worker>();
list.add(new Worker("zhang3",18,3000));
list.add(new Worker("li4",25,3500));
list.add(new Worker("wang5",22,3200));
//2.在li4前插入zhao6
list.add(1,new Worker("zhao6",24,3300));
//3.删除wang5的信息
list.remove(3);
//4.用for遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName()+"\t"+list.get(i).getAge()+"\t"+list.get(i).getSalary());
}
//5.用for-each遍历,对List中所有的工人调用work方法
for (Worker i : list) {
i.work();
}
}
}
为Worker类添加 equals 方法:
public boolean equals(Object obj){
if(obj==this){
return true;
}
if(obj==null){
return false;
}
if(this.getClass()!=obj.getClass()){
return false;
}
Worker ww=(Worker)obj;
if (this.age != ww.age)
return false;
if (this.name==null){
if(ww.name != null){
return false;
}
}else if(!name.equals(ww.name)) {
return false;
}
if(this.salary!=ww.salary){
return false;
}
return true;
}