在千锋“逆战”学习第23天
每日一句:你的一个程序有时正常有时不正常,而你已经完全遵循编程的规则,为什么?事实上我认为相信只要遵循别人所说就能得到想当然的结果的人其实是个傻瓜。
今天学了集合、List接口和实现类。
明天继续加油。
作业
2.有如下代码:
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)把//1处的代码补充完整,要求输出list中所有元素内容
public static void printList(List list) {
//1
for(int i=0;i<list.size();i++) {
System.out.print(list.get(i)+" ");
}
}
(2)写出程序运行结果
hello Java Learn World
(3)如果要把实现类由ArrayList换为LinkedList,应该改哪里。ArrayList与LinkedList使用上有什么区别,实现上有什么区别
List<String> list = new LinkedList();
ArrayList类实现了可变的数组,允许保存所有元素,包括null;缺点是向指定的索引位置插入对象或者删除对象的速度较慢。
LinkedList类采用了链表结构保存对象,它便于向集合中插入和删除对象,比ArrayList相比它删除或者插入对象的效率更高;但是对于随机访问来说,他的效率就比较低了。
(4)如果要把实现类由ArrayList换为Vector,应该改哪里。ArrayList与Vector使用上有什么区别,实现上有什么区别
List<String> list = new Vector<String>();
Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
--------------------------------------------------------------------------
3.有如下代码:
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.add("Hello");
list.remove("Hello");
list.remove(0);
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
运行结果:
Hello
Learn
Hello
--------------------------------------------------------------------------
5.有一个Worker类。
(1)创建一个list,在list中增加三个工人
(2)在li4之前插入一个工人,信息为:姓名:zhao6,年龄24,工资:3300
(3)删除wang5信息
(4)利用for循环遍历,打印list所有工人信息
(5)利用for-each遍历,对list中所有工人调用work方法
(6)为worker类添加equals方法
public class Worker {
private String name;
private int age;
private double salary;
public Worker() {
}
public Worker(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
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;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public void work() {
System.out.println(name + " work");
}
public String toString() {
return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
// 6.为worker类添加equals方法
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return true;
}
Worker worker = (Worker) obj;
if (this.name.equals(worker.name) && this.age == worker.age && this.salary == worker.salary) {
return true;
}
return false;
}
}
public class TestMain {
public static void main(String[] args) {
//1.创建一个list,在list中增加三个工人
List<Worker> list = new ArrayList<Worker>();
list.add(new Worker("zhang3", 18, 3000.0));
list.add(new Worker("li4", 25, 3500.0));
list.add(new Worker("wang5", 22, 3200.0));
//2.在li4之前插入一个工人
list.add(1, new Worker("zhao6", 24, 3300.0));
//3.删除wang5信息
list.remove(3);
//4.利用for循环遍历,打印list所有工人信息
System.out.println("4.----------");
System.out.println("工人信息:");
for(int i=0;i<list.size();i++) {
Worker w = list.get(i);
System.out.println("name:"+w.getName()+" age:"+w.getAge()+" salary:"+w.getSalary());
}
//5.利用for-each遍历,对list中所有工人调用work方法
System.out.println("5.----------");
for(Worker str:list) {
str.work();
}
//6.为worker类添加equals方法
System.out.println("6.----------");
System.out.println(list.get(0).equals(list.get(1)));
}
}
运行结果:
4.----------
工人信息:
name:zhang3 age:18 salary:3000.0
name:zhao6 age:24 salary:3300.0
name:li4 age:25 salary:3500.0
5.----------
zhang3 work
zhao6 work
li4 work
6.----------
false