Java中的集合
Collection容器
Colletion接口定義了存取一組對象的方法,其子接口Set和List分別定義了存儲方式。
Collection接口中定義的方法
int size()
獲取集合容器中元素的個數
boolean isEmpty()
集合容器是否爲空,即沒有元素
void clear()
清空集合容器中的所有元素
boolean contains(Objectelement)
集合容器中是否存在某個元素
boolean add(Object element)
向集合容器中添加⼀個元素
boolean remove(Objectelement)
從集合容器中移除⼀個元素
booleancontainsAll(Collection c)
集合容器中是否包含⼀個容器中所有的元素
boolean addAll(Collection c)
將傳⼊的集合容器c中的所有元素添加到當前的集合容器
boolean removeAll(Collectionc)
從當前集合容器中移除集合容器c中的所有元素
boolean retainAll(Collectionc)
當前集合容器和傳⼊的集合容器之間是否存在交集
Object[] toArray()
將集合容器轉換爲⼀個對象數組
Iterator iterator()
迭代集合容器中的元素
Collections工具類
常用的方法
void sort(Collection c)
對集合中的元素按照⾃然順序進⾏排序
Object max(Collection c)
獲取集合中的最⼤元素,並且返回最⼤元素
Object min(Collection c)
獲取集合中的最⼩元素,並且返回最⼩元素
boolean replaceAll(Collectionc, Object ele1, Object ele2)
元素替換,將集合中的所有元素ele1替換成ele2
案例:給對象進行排序
用戶類中包含姓名和年齡屬性,要求給多個用戶按照年齡進行排序
讓User對象實現Comparable<T>接⼜,實現⽅法
compareTo,⽅法返回值⼤於0表⽰當前對象⼤於⽤於對⽐
的對象,⼩於0表⽰當前對象⼩於⽤於對⽐的對象
packagetest;
public classPerson implements Comparable<Person>{
privateString name;
private int age;
publicPerson(String name, int age) {
this.name =name;
this.age =age;
}
publicString getName() {
return name;
}
public voidsetName(String name) {
this.name =name;
}
public intgetAge() {
return age;
}
public voidsetAge(int age) {
this.age =age;
}
@Override
public intcompareTo(Person o) {
if(this.age>o.getAge()){
return 1;
}else{
return -1;
}
}
@Override
publicString toString() {
return "姓名:"+this.name+" 年齡:"+this.age;
}
}
2、在測試類中調⽤Collections集合的sort⽅法對集合進⾏排
序
packagetest;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.List;
importorg.junit.Test;
public classTest1 {
@Test
public voidtest() {
List<Person> list = newArrayList<Person>();
Person p1 = newPerson("張三",15);
Person p2 = newPerson("李四",19);
Person p3 = newPerson("王五",13);
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println("排序前:");
for (Personp : list) {
System.out.println(p.toString());
}
System.out.println("***********************");
System.out.println("排序後:");
Collections.sort(list);
for(Person p : list) {
System.out.println(p.toString());
}
}
}
List容器
List容器中的數據有順序,並且可以重複
ArrayList集合
add(Object obj)
向List集合容器中添加元素,元素可重複添加
int size()
獲取List集合容器中元素的個數
get(int index)
從List集合中獲取元素,返回Object
remove(Object obj)
從集合中刪除元素
remove(int index)
從集合中刪除元素
clear()
從集合中刪除所有元素
contains(Object obj)
集合中是否存在某個元素,返回boolean值
示例:
public voidtest1(){
List l = new ArrayList();//聲明List集合容器器
l.add("abc"); //向list容器器中添加⼀一個String對象
l.add(true); //向list容器器中添加⼀一個Boolean對象
l.add(1); //向list容器器中添加⼀一個Integer對象
int size= l.size(); //獲取集合中元素的個數
System.out.println("集合中元素個數是:"+size);
Object obj = l.get(2); //獲取集合中的元素,索引值從0開始
System.out.println("集合中第3個元素是:"+obj);
System.out.println(l.toString());
// l.remove("abc");//刪除集合中的元素
// l.remove(0); //刪除集合中的元素,索引從0開始
// l.clear(); //刪除集合中所有元素
System.out.println("abc是不不是在整個集合中?"+l.contains("abc"));
System.out.println(l.toString());
}
LinkedList集合
相對於ArrayList,LinkedList類中添加了⼀些處理列表兩端元素的⽅法
addFirst(Object o)
向集合容器的頂部添加元素
addLast(Object o)
向集合容器的尾部添加元素
Object getFirst()
獲取集合容器頂部元素
Object getLast()
獲取集合容器尾部元素
Object removeFirst()
刪除,並返回集合容器頂部元素
Object removeLast
刪除,並返回集合容器尾部元素
示例:
public voidtest1(){
LinkedList<Integer> list = newLinkedList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.addFirst(0); //向集合頂部添加⼀一個元素
list.addLast(100); //向集合尾部添加⼀一個元素
System.out.println("被刪除的對象是:"+list.removeFirst());//刪除頂端元素,並且返回被刪除的元素
System.out.println("被刪除的對象時:"+list.removeLast());//刪除尾部元素,並且返回被刪除的元素
System.out.println("集合的第⼀一個元素是:"+list.getFirst());//獲取頂部元素
System.out.println("集合中的最後⼀一個元素是:"+list.getLast());//獲取底部元素
System.out.println(list.toString());
}
Set容器
Set容器中的數據對象沒有順序,並且不可重複
HashSet的常用方法
add(Object obj)
向Set集合容器中添加⼀個元素,元素不可重複添加
int size()
獲取Set集合容器中所有元素的個數
iterator()
應⽤迭代器獲取Set集合中所有的元素
remove(Object obj)
從Set集合容器中移除元素
clear()
刪除Set集合容器中的所有元素
contains(Object obj)
判斷Set 集合容器中是否存在某個嚴肅,返回boolean值
題目:隨機⽣成5個0-10之間的整數,控制檯輸出這5個數字,要求數字不可以重複
1、將隨機⽣成的數字存到Set集合容器中
2、⽤迭代器輸出Set容器中的所有元素
Set<Integer>set = new HashSet<Integer>();
while(true){
int x =(int) (Math.random()*10);
System.out.println(x);
if(set.size()< 5){
set.add(x);
}else{ //循環停⽌止
break;
}
}
System.out.println(set.toString());
Map容器
Map容器定義了儲存“鍵(key)——值(value)映射對”的⽅法,簡稱“鍵值對”
Map提供的常用方法
put(Object key, Object value)
向Map集合中添加⼀條記錄,記錄是以鍵值對的形式存放的
Object get(Object key)
從Map集合中通過key來獲取value
Set keySet()
獲取map集合中所有的key
Set entrySet()
獲取Map集合中所有的記錄(key-value對象Entry)
示例:
public voidtest1(){
Map<String, String> map = newHashMap<String, String>();
map.put("no1", "Beijing"); // 向map集合中添加⼀一條記錄
map.put("no2", "ShangHai");
map.put("no3", "HangZhou");
map.put("no4", null);
map.put(null, "xxxx");
Set<Map.Entry<String, String>>enSet = map.entrySet();
Iterator<Map.Entry<String,String>> itr = enSet.iterator();
while(itr.hasNext()){
Map.Entry<String, String> entry =itr.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+ "--" + value);
}
System.out.println("************************");
for(Map.Entry<String,String> entry : map.entrySet()){
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+ "--" + value);
}
}
注意點:
Hashtable集合
Hashtable和HashMap⽤法⼀致,以下是兩者的不同點
HashMap是線程不安全的,Hashtable是線程安全的
HashMap允許有null的鍵和值,Hashtable不允許