知识总结
集合
- Collection体系集合:
(1)Collection父接口:该体系结构的根接口,代表一组对象,称为“集合”,每个对象都是该集合的“元素”。
(2)List接口的特点:有序、有下标、元素可重复。
(3)Set接口的特点:无序、无下标、元素不可重复。
2.List子接口:
(1)特点:有序、有下标、元素可以重复。
(2)继承可父接口提供的共性方法,同时定义了一些独有的与下标相关的操作方法。
3.List实现类:
(1)JDK8的ArrayList,实际初始长度是0
(2)首次添加元素时,需要实际分配数组空间,执行数组扩容操作
(3)真正向数组中插入数据,用的时候再创建,或再加载,有效的降低无用内存的占用
4.ArrayList:
(1)数组结构存储,查询快,增删慢。
(2)JDK 1.2发布,执行效率快,线程不安全。
5.Vector:
(1)数组结构存储,查询快,增删慢。
(2)JDK 1.0发布,执行效率慢,线程安全。
6.LinkedList:
链表(链接列表)结构存储,查询慢、增删快。
每日练习
- 有如下代码:
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("Learn");
list.add("Java");
printList(list);
}
public static void println(List list){
//1
}
}
要求:
(1)把//1处的代码补充完整,要求输出list中所有的元素内容
(2)写出程序的执行结果
(3)如果要把实现类由ArrayList换为LinkedList,应该改哪里?ArrayList和LinkedList使用上有什么区别?实现上有什么区别?
(4)如果要把实现类由ArrayList换为Vector,应该改哪里?ArrayList和Vector使用上有什么区别?实现上有什么区别?
答:(1)
for(int i = 0 ; i < list.size() ; i++){
System.out.println(list.get(i));
}
(2)
Hello
World
Learn
Java
(3)把Listlist = new ArrayList();
改为:List list = new LinkedList();
ArrayList:数组结构存储,查询快,增删慢
LinkedList:链表(链接列表)结构存储,查询慢、增删快
实现上利用接口引用,更改创建对象形式
(4)把Listlist = new ArrayList();
改为:List list = new Vector();
ArrayList:数组结构存储,查询快,增删慢,执行效率快,线程不安全
Vector:数组结构存储,查询快,增删慢,执行效率慢,线程安全
实现上利用接口引用,更改创建对象形式
- 写出下面程序的运行结果
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
- 已知有一个Worker类如下:
public class Worker {
private int age;
private String name;
private double salary;
public Worker(){}
public Worker(int age, String name, double salary) {
this.age = age;
this.name = name;
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");
}
}
完成下面的要求:
(1)创建一个List,在List中增加三个工人,基本信息如下
(2)在li4之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300
(3)删除wang5 的信息
(4)利用for循环遍历,打印List中所有工人的信息
(5)利用for-each遍历,对List中所有的工人调用work方法
(6)为Worker类添加equals方法
答:
import java.util.*;
class Worker {
private int age;
private String name;
private double salary;
public Worker(){}
public Worker(String name, int age, double salary) {
this.age = age;
this.name = name;
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");
}
public boolean equals(Object obj) {
//比较地址是否一样
if(this == obj){
return true;
}
//确认对象不能为null
if(obj == null){
return false;
}
//确认类型
if(obj.getClass() != this.getClass()){
return false;
}
//转型
Worker w = (Worker)obj;
//比较内容
if(this.name.equals(w.name) && this.age == w.age && this.salary == w.salary){
return true;
}
return false;
}
}
public class TestWorker{
public static void main(String[] args){
Worker worker1 = new Worker("zhang3",18,3000.0);
Worker worker2 = new Worker("li4",25,3500.0);
Worker worker3 = new Worker("wang5",22,3200.0);
Worker worker4 = new Worker("zhao6",24,3300.0);
List ll = new ArrayList();
ll.add(worker1);
ll.add(worker2);
ll.add(worker3);
ll.add(1, worker4);
ll.remove(worker3);
for(int i = 0 ; i < ll.size() ; i++){
System.out.println(((Worker) ll.get(i)).getName() + "\t" + ((Worker) ll.get(i)).getAge() + "\t" + ((Worker) ll.get(i)).getSalary());
}
for(int i = 0 ; i < ll.size() ; i++){
((Worker) ll.get(i)).work();
}
}