1. 程式人生 > >Collection —— List集合

Collection —— List集合

arraylist 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)轉換數組

Object[] toArray():返回值是一個Object類型的數組

註意:不能統一向下轉型,如需要遍歷數組時候逐個向下轉型

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集合