------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
List的三个子类的特点
ArrayList,在开发中,在学习中用的最多。
ArrayList底层就是使用数组实现。
特点:查询性能高,插入或删除性能低
LinkedList
LinkedList底层是链表实现。
特点:查询性能低,插入或删除性能高
Vector
Vector底层也是使用数组实现。
在实际开发中现在已经不合适Vector.
为了保证同步,我们一般也不使用Vector,而是使用同步的ArrayList。
ArrayList与Vector的区别?
ArrayList是异步的----安全性差,性能高
Vector是同步的------安全性高,性能低。
ArrayList存储字符串并遍历
package cn.itcast.arrayList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
//ArrayList存储字符串并遍历
public class ArrayListDemo1 {
public static void main(String[] args) {
// 1.创建一个ArrayList集合
ArrayList list = new ArrayList();
// 2.向集合中添加元素 String
list.add("tom");
list.add("fox");
list.add("james");
// 3.遍历list集合
// 第一种
for (int i = 0; i < list.size(); i++) {
String s = (String) list.get(i); //强制转换
System.out.println(s);
}
// 第二种
for (Iterator it = list.iterator(); it.hasNext();) {
String s = (String) it.next(); //强制转换
System.out.println(s);
}
// 第三种
for (ListIterator lit = list.listIterator(); lit.hasNext();) {
String s = (String) lit.next();//强制转换
System.out.println(s);
}
}
}
ArrayList存储自定义对象并遍历
package cn.itcast.arrayList;
import java.util.ArrayList;
import java.util.Iterator;
//向ArrayList中存储三个Student对象,并遍历
public class ArrayListDemo2 {
public static void main(String[] args) {
// 1.创建ArrayList
ArrayList list = new ArrayList();
// 2.向集合中添加元素
list.add(new Student(1, "tom", "男"));
list.add(new Student(2, "fox", "男"));
list.add(new Student(3, "kobe", "男"));
//3.遍历集合
//在开发中我们一般使用比较多的方式是1.for+size+get 2.Iterator
//3.1使用for+size+get
// for (int i = 0; i < list.size(); i++) {
// Student s=(Student)list.get(i); //集合中是什么类型,我们在使用时就转换成什么类型
// System.out.println(s.getId()+" "+s.getName());
// }
//3.2迭代器
for(Iterator it=list.iterator();it.hasNext();){
Student s=(Student)it.next();
System.out.println(s);
}
}
}
LinkedList的特有功能
package cn.itcast.linkedlist;
import java.util.Iterator;
import java.util.LinkedList;
//LinkedList介绍
public class LinkedListDemo1 {
public static void main(String[] args) {
// 1.创建一个LinkedList
LinkedList ll = new LinkedList();
// 2.向集合中添加元素
ll.add("a");
ll.add("b");
ll.add("c");
ll.add("d");
3.遍历
for(Iterator it=ll.iterator();it.hasNext();){
String s=(String) it.next();
System.out.println(s);
}
for(int i=0;i<ll.size();i++){
System.out.println(ll.get(i));
}
System.out.println("获取头元素:"+ll.getFirst());
System.out.println("获取尾元素:"+ll.getLast());
ll.removeFirst(); //将头元素remove
System.out.println(ll);
ll.removeLast(); //将尾元素remove
System.out.println(ll);
ll.addFirst("first"); //添加头元素
System.out.println(ll);
ll.addLast("end");
ll.add("e");
System.out.println(ll);
}
}
/**
* LinkedList底层实现是链表。 在API中我们知道 LinkedList可以直接对头元素或尾元素进行 get,remove,insert操作.
*
* 对头尾元素进行get操作. getFirst getLast 对头尾元素进行remove操作 removeFirst removeLast
* 对头尾元素进行insert操作 addFirst addLast
*
*/
去除ArrayList集合中重复自定义对象元素案例
实现原理
package cn.itcast.listTest;
import java.util.ArrayList;
//去除ArrayList中重复的Student对象.
public class ArrayListTest3 {
public static void main(String[] args) {
// 1.创建一个ArrayList集合
ArrayList list = new ArrayList();
// 2.向集合中添加元素
Student s1 = new Student(1, "tom");
Student s2 = new Student(2, "fox");
Student s3 = new Student(3, "james");
Student s4 = new Student(2, "fox");
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
// 3.判断集合中是否有重复的元素,如果有重复remove。
// 问题:ArrayList集合中元素的重复,“重复”的概念是什么?
// /我们需要重写equals方法.
// 问题:怎样重写equals?
// Student s5 = new Student(2, "fox");
// System.out.println(list.contains(s5));
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
Student ss1 = (Student) list.get(i);
Student ss2 = (Student) list.get(j);
if (ss1.equals(ss2)) { // ss1==ss2
// 注意:如果重定了equals方法,在比较时,就比较的是属性。
list.remove(j);
j--;
}
}
}
System.out.println(list);
}
}
// 补充:如果使用contains方法来判断 是否重复,也需要重写equals方法。
class Student {
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
}