Collection —— List集合
Collection集合 ———— 存儲數據
第一部分(List)
一、數組和集合的區別
1)存儲數據
數組:只存儲同一種數據類型的元素
集合:可以存儲多種類型的元素
2)存儲長度
數組:固定長度
集合:可變的,任意添加數據進集合
3)存儲類型
數組:可以存儲基本數據類型,也可以存儲引用數據類型
集合:只能存儲引用數據類型
二、Collection接口
jdk不提供此接口的任何直接實現,而是通過子接口的具體類進行實現!
1、實例化
Collection c = new ArrayList();
ArrayList是List接口的子實現類;List接口繼承了Collection接口所以通過接口的多態對Collection進行實例化創建對象
2、向集合內添加元素
boolean add(Object obj):只要添加成功就返回true;
boolean addAll(Collection c):將集合c中元素全部添加到集合中,添加成功就返回true;
3、對集合進行操作
1)判斷功能:
boolean isEmpty():集合為空則返回true;
boolean contains(Object obj):集合包含obj,則返會true;
boolean containsAll(Collection c):目標集合包含集合c則返回true;
boolean equals(Object obj):判斷obj是否與目標集合相等
2)查詢集合元素數:
int size():相當與數組的length屬性;String的length()方法;
3)刪除功能
boolean remove(Object obj):只刪除第一個obj,如果刪除返會true;
boolean removeAll(Collection c):刪除集合c與目標集合共有的元素,至少刪除一個元素,才會返回true;
boolean retainAll(Collection c):對一個集合取交集,保留集合c與目標集合共有的元素,至少刪除一個元素,才會返回true;
void clear():移除集合中的所有元素
4)轉換數組
註意:不能統一向下轉型,如需要遍歷數組時候逐個向下轉型
4、集合遍歷
1)通過toAarray()方法轉換成數組,for()循環遍歷
Collection c = new ArrayList();
。。。
Object[] obj = c.toArray();
for(int i = 0;i < obj.length;i++){
System.out.println((String)obj[i]);
}
2)通過叠代器遍歷
Iterator iterator()返回在此集合的元素上進行叠代的叠代器
接口Iterator方法:
Object next():返回叠代的下一個元素(獲取元素)
boolean hasNext():如果仍有元素可以叠代,則返回 true。
Collection c = new ArrayList();
。。。
Iterator it = c.iterator();
while(it.hasNext){
System.out.println(it.next()); //註意在循環體能只能出現一次next()方法
} //否則容易出現NoSuchElementException異常
三、List接口 ———— 繼承Collection
1、List集合
1)List集合特點:List集合是一個有序的集合,可以有重復的元素;
2)List子類的特點
ArrayList
底層數據結構是數組,查詢快,增刪慢,線程不安全,不同步,效率高;
vector
底層數據結構是數組,查詢快,增刪慢,線程安全,同步,效率低;
LinkedList
底層數據結構數鏈表,查詢慢,增刪快,線程不安全,不同步,效率高;
3)list的叠代器
ListIterator listIterator():List列表叠代器
ListIterator接口:
boolean hasNext():表示正向遍歷:是否有下一個可以叠代的元素
Object next():獲取下一個元素
boolean hasPrevious():表示逆向遍歷:是否有上一個可以叠代的元素
Object previous()返回列表中的前一個元素
註意:必須先正向遍歷後再逆向遍歷,否則無法逆向遍歷,沒有意義
2、ArrayList類
1)實例化:ArrayList c = new ArrarList();
2)特有功能:
添加功能:
void add(int index,Object element):在指定位置添加指定的元素
獲取功能:
Object get(int index):獲取指定位置的元素
刪除功能:
Object remove(int index):刪除指定位置的元素,返回的就是刪除的元素
替換功能:
Object set(int index,object element):將指定位置的元素用element該元素替代,返回的是需要被替代的元素!
3)集合遍歷
A:普通for()循環
ArrayList c = new ArrayList();
。。。
for(int i = 0;i < c.size();i++){
System.out.println(c.get(i));
}
B:通過Iterator叠代器遍歷(同Collection)
C:通過List特有的listIterator()方法
ArrayList c = new ArrayList();
。。。
ListIterator li = c.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
3、Vector類
1)實例化: Vector vector = new Vector();
2)特有方法:
添加功能:
public void addElement(Object obj) ----->boolean add(Object obj)將指定元素添加到此向量的末尾
public Object elementAt(int index) ----->Object get(int index)返回向量中指定位置的元素
public Enumeration elements() ----->Iterator iterator()
接口 Enumeration:
boolean hasMoreElements() ----->hasNext()
Object nextElement() ----->next()
3)集合遍歷
A:普通for()循環:利用size(),get()方法
B:通過Iterator叠代器遍歷
C:通過List特有的listIterator()方法
D:通過Vector特有的elements()方法
Vector c = new Vector();
。。。
Enumeration e = c.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
4、LinkedList類
1)實例化:LinkedList c = new LinkedList();
2)特有功能:
和添加相關的方法:
public void addFirst(Object e):將指定元素插入此列表的開頭
public void addLast(Object e):將指定元素添加到此列表的結尾
和獲取相關的方法:
public Object getFirst():返回此列表的第一個元素。
public Object getLast():返回此列表的最後一個元素
和刪除相關的方法:
public Object removeFirst():刪除此列表的第一個元素
public Object removeLast():刪除此列表的最後一個元素
四、ArrayList練習
1、 import java.util.ArrayList;
import java.util.ListIterator;
//需求:給List存儲字符串,判斷如果這個字符串是"world",然後給集合中添加一個新的 字符串"javaee"?
public class ListTest {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("hello");
al.add("world");
al.add("java");
for(int i = 0;i < al.size();i++){
if(al.get(i) == "world"){
al.add(i + 1, "javaee");
}
}
ListIterator li = al.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
}
}
sop: hello
world
javaee
java
2、 import java.util.ArrayList;
import java.util.ListIterator;
//需求:ArrayList去除集合中字符串的重復值(字符串的內容相同)
public class ListDemo {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("aa");
al.add("aa");
al.add("aa");
al.add("bb");
al.add("bb");
al.add("cc");
ArrayList al2 = new ArrayList();
for(int i = 0;i < al.size();i++){
if(!(al2.contains(al.get(i)))){
al2.add(al.get(i));
}
}
ListIterator li = al2.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
}
}
sop: aa
bb
cc
3、 import java.util.ArrayList;
import java.util.ListIterator;
/*
* 需求:ArrayList去除集合中字符串的重復值(字符串的內容相同)
* 附件條件:不允許新建集合去完成!
*/
public class ListDemo2 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("aa");
al.add("aa");
al.add("aa");
al.add("bb");
al.add("bb");
al.add("cc");
for(int x = 0;x < al.size() - 1;x++){
for(int y = x + 1;y < al.size();y++){
if(al.get(x) == al.get(y)){
al.remove(y);
y--;//每刪除一次重復元素不給y--的話,角標變化就會漏掉
}
}
}
ListIterator li = al.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
}
}
sop: aa
bb
cc
4、 import java.util.ArrayList;
import java.util.ListIterator;
////需求:ArrayList去除集合對象的重復的成員信息(成員變量的值是一樣)
public class ListDemo3 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Student("郭嘉",25));
al.add(new Student("荀彧",34));
al.add(new Student("荀彧",34));
al.add(new Student("荀攸",36));
al.add(new Student("郭嘉",25));
al.add(new Student("郭嘉",25));
al.add(new Student("程昱",30));
al.add(new Student("賈詡",42));
ArrayList al2 = new ArrayList();
for(int i = 0;i < al.size();i++){
if(!(al2.contains(al.get(i)))){ //contains()依賴的是equals()方法
al2.add(al.get(i)); //所以使用時要重寫equals();
}
}
ListIterator li = al2.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
}
}
class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
sop: Student [name=郭嘉, age=25]
Student [name=荀彧, age=34]
Student [name=荀攸, age=36]
Student [name=程昱, age=30]
Student [name=賈詡, age=42]
Collection —— List集合