集合框架概念
- 集合框架是一個用來代表和操作集合的統(tǒng)一架構.所有的集合框架都包含以下內容:
1.接口:是代表集合的抽象數(shù)據(jù)類型.接口允許集合獨立操縱其代表細節(jié).在面向對象語言.接口通常形成一個層次.
2.實現(xiàn)(類):是集合接口的具體實現(xiàn).- 算法:是實現(xiàn)集合接口的對象里的方法執(zhí)行的一些有用的計算.
- 特點
1.集合的長度是可變的.
2.集合只用于存儲對象.
3.集合可以存儲不同類型的對象.
Collection接口
*定義了存取一組對象的方法,其子接口Set和 List分別定義了存儲方法.
*Set中的數(shù)據(jù)對象沒有順序且不可以重復.
*List中的數(shù)據(jù)對象有順序且可以重復.
1.PNG
在上圖中 Collection是一個超級接口 Set和List繼承與它.Set和list也是接口.
hashSet是Set的實現(xiàn)類,ArrayList和LinkedList是List的實現(xiàn)類.
LIst
ArrayList的一些方法
- ArrayList采用數(shù)組實現(xiàn),適合查找,更新
ArrayList list = new ArrayList();
list.add("one");
list.add("two");
list.add("thre");
System.out.println(list);
//刪除元素
list.remove(1);//根據(jù)下標
list.remove("thre");//根據(jù)元素
System.out.println(list);
//跟新
list.set(0,"跟新元素");
System.out.println(list);
//查找元素
Object obj =list.get(0);
System.out.println(obj);
//是否包含某元素
boolean isContain = list.contains("跟新元素");
System.out.println(isContain);
//元素個數(shù)
int size = list.size();
System.out.println(size);
Lindedlist的一些方法
- LinkedList 采用雙向鏈表實現(xiàn),適合添加,刪除.
LinkedList list = new LinkedList();
list.add("one");
list.add("two");
list.add("thre");
System.out.println(list);
//刪除元素
list.remove(1);//根據(jù)下標
list.remove("thre");//根據(jù)元素
System.out.println(list);
//跟新
list.set(0, "跟新元素");
System.out.println(list);
//查找元素
Object obj =list.get(0);
System.out.println(obj);
//是否包含某元素
boolean isContain = list.contains("跟新元素");
System.out.println(isContain);
//元素個數(shù)
int size = list.size();
System.out.println(size);
這些都是list的兩個實現(xiàn)類,上面的方法都是一些常用的方法要熟練應用.
Set
HashSet一些方法
- 創(chuàng)建HashSet對象 (因為是無序的,所以不可以用get來獲取元素)
*HashSet基于HastMap實現(xiàn)的,利用了鍵不能重復的特點. - 重復元素的判斷機制
1.只要obj == obj1 認為 obj和obj1是相等的元素
2.hashCode和 equals相等 就認為元素相等.
HashSet set = new HashSet();
set.add("1");//添加元素
set.add("2");
set.add("1");
System.out.println(set);
//遍歷set
for (Object object : set) {
System.out.println(object);
}
//是否包含元素
boolean iscon = set.contains("1");
System.out.println(iscon);
//刪除元素
set.remove("1");
TreeSet
- 可以排序 1.自然排序 2.自定義排序
- TerrSet可以對數(shù)字和字符串排序 因為都實現(xiàn)了comparable接口
- 如果在comparable接口中返回0 認為是同一元素.
public static void main(String[] args) {
TreeSet set = new TreeSet();
// set.add("2");
// set.add("1");
// set.add("4");
// set.add("6");
// set.add("8");
Person1 p = new Person1();
p.name = "nana";
p.age = 11;
Person1 p1 = new Person1();
p1.name = "momo";
p1.age = 10;
Person1 p2 = new Person1();
p2.name = "lala";
p2.age = 8;
set.add(p);
set.add(p1);
set.add(p2);
System.out.println(set);
}
}
class Person1 implements Comparable{
String name;
int age;
@Override // 自定義相等的規(guī)則
public boolean equals(Object obj) {
// 如果類型不相等,返回false
if (!(obj instanceof Person)) {
return false;
}
// 如果名字相同, 返回true
if (((Person)obj).name.equals(this.name)) {
return true;
}
// 如果名字不相同,返回false
return false;
}
// hashCode
@Override // 計算一個對象的hash值
public int hashCode() {
return this.name.hashCode();
}
@Override
public int compareTo(Object o) {
if (!(o instanceof Person1)) {
Person1 p = (Person1)o;
if (this.age >p.age) {
return 1;
}else if(this.age == p.age){
return 0;
}else {
return -1;
}
}
return 0;
}
@Override //自定義輸出
public String toString() {
return "name:"+this.name+" age:"+age;
}
Map接口
- Map接口定義了存儲"鍵(key)-值(value)映射對"的方法.
- 鍵不能重復 value可以重復.
HashMap map = new HashMap();
//保存數(shù)據(jù)
map.put("鍵", "值");
map.put("鍵1", "值1");
map.put("鍵2", "值2");
//讀取數(shù)據(jù)
Object obj = map.get("鍵");
System.out.println(obj);
//遍歷
for (Object item : map.keySet()) {
System.out.println(map.get(item));
}
//跟新
map.put("鍵", "跟新的值");
System.out.println(map);
//刪除
map.remove("鍵");
System.out.println(map);
//包含
map.containsKey("鍵1");
//map.containsValue("值1");
//System.out.println(map);
//清空
map.clear();
//System.out.println(map);
TreeMap
- 根據(jù)key進行排序
public static void main(String[] args) {
Stu stu = new Stu();
stu.age = 12;
stu.name = "楊少鋒";
Stu stu1 = new Stu();
stu1.age = 17;
stu1.name = "阿墩";
Stu stu2 = new Stu();
stu2.age = 11;
stu2.name = "eerdun";
Stu stu3 = new Stu();
stu3.age = 11;
stu3.name = "張三";
TreeMap map = new TreeMap();
map.put("12", stu);
map.put("2", stu1);
map.put("15", stu2);
map.put("3", stu3);
System.out.println(map);
}
}
class Stu implements Comparable{
@Override
public String toString() {
return "Stu [age=" + age + ", name=" + name + "]";
}
int age;
String name;
@Override
public int compareTo(Object o) {
Stu stu = (Stu)o;
if (this.age > stu.age) {
return 1;
} else if (this.age == stu.age) {
// 年齡一樣我們可以按照名字進行排序
return 0;
} else {
return -1;
}
}
}