1、集合框架java
集合是ava語言中很是重要的API;數組
用來存儲多個數據;數據結構
實現了不一樣的數據結構。框架
三大接口:ide
Collection:全部集合類的根接口;List、set是經常使用的子接口,ArrayList、LinkedList、HashSet是其下經常使用的三個類。this
Map:映射接口,存放鍵值對;HashMap是其下經常使用的類。spa
Iterator:遍歷集合的迭代接口。對象
Java的集合框架是由不少接口、抽象類、具體類組成的,都位於java.util包中。排序
2、Collection接口繼承
一、概念
Collection<E>接口
Collection即集合,是全部集合類的根接口,同時Collection接口是一個泛型接口。
方法:
add(E):添加對象;
Iterator<E> iterator():生成迭代器對象,進而可 以迭代集合中的元素;
int size();獲取集合中元素數量(size實際大小)。
二、Collection的子接口
List:有序的集合,元素有序存入;
Set:無序無重複的集合,即存入的元素不重複;
Queue:隊列,jdk1.5版本新增接口,Queue實現了「先進先出」(FIFO)的存儲結構,具備全部集合基本操做,Queue還提供了一些新的插入、提取、查詢等方法。
3、Map接口
一、Map接口應用
Map中保存的是鍵值對Map<key,Value> ,Key值不容許重複,若是重複,則覆蓋。
經常使用方法:
put(K key,V value)該方法能夠將key和value存到Map對象;
get(Object key)該方法能夠根據key值返回對應的value;
size()返回Map對象中鍵值對的數量。
二、Map接口的實現類
HashMap較經常使用的Map集合類,key值的hashCode和equals保證元素惟一性;
TreeMap不只能夠保證key不重複,還能夠對value數據進行排序;
HashTablejdk1.0中定義的類,實現同步。
4、List接口
一、概念
繼承了Collection接口,而且擴展出屬於本身的方法,List 集合中的元素都是與索引有關係的,所以List 集合擴展的方法都是與索引有關係的。
例如: add(int index,E)……添加元素在所對應的 索引位置。
二、List的實現類
ArrayList:數組列表,數據採用數組方式存儲(實際用的最多的集合);
LinkedList:鏈表;
Vector:jdk1.0中的集合,實現了同步。
a、ArrayList
ArrayList被稱爲數組列表,數據採用數組的方式存儲,使用連續內存存儲,是Java語言中可變長度數組的實現。
ArrayList的經常使用方法:
add(Object o);->集合中添加數據;
remove(Object o)->刪除集合中的數據;
add(int index, Object element)->給集合中某個索引位置添加一個數據;
get(int index)->獲取集合中某個位置的信息。
ArrayList的應用:
基本使用:不使用泛型,目前不多用
public class TestArrayList {
public static void main(String[] args) {
List list= new ArrayList();
list.add("string");
list.add(12);
list.add('w');
}
}能夠將任何類型對象都存儲進去。
泛型的使用:對象中只能持有相同類型對象,不然將發生編譯錯誤。
Test:(運行須要建立User類,寫出其有參構造,get、set方法)
public class GenericsList {
public static void main(String[] args) {
. //建立用戶對象
User user=new User("張三");
User user1=new User("李四");
//建立集合對象,存放用戶對象
List<User> userList=new ArrayList<User>();
userList.add(user);
userList.add(user1);
}
}
b、LinkedList
LinkedList是以鏈表的方式存放的,每一個節點上存放的是數據信息。
LinkedList的經常使用方法:
add(E element)—向鏈表末尾添加一個新的節點,該節點中的數據是參數element指定的對象;
add(int index, E element)—向鏈表的指定位置添加一個新的 節點,該節點中的數據是參數element指定的對象;
擴展方法:
addFirst(E element)—向鏈表的頭添加新節點,該節點中的數據 是參數element指定的對象;
addLast(E element)—向鏈表的末尾添加新節點,該節點中 的數據是參數element指定的對象。
LinkedList的應用:
例如:
public class TestLinkedList {
public static void main(String[] args) {
//建立用戶對象
User user=new User("王星");
//建立集合對象,存放用戶對象
List<User> list=new LinkedList<User>();
list.add(user);
}
}
c、ArrayList和LInkedList的遍歷(迭代器遍歷(Iterator)-不多使用:經過集合返回迭代器)
加強for循環:也是經過迭代器的方法獲取信息
public class GenericsList {
public static void main(String[] args) {
//建立用戶對象
User user=new User("張三");
User user1=new User("李四");
//建立集合對象,存放用戶對象
List<User> userList=new LinkedList<User>();
userList.add(user);
userList.add(user1);
for(User userInfo:userList){
System.out.println(userInfo);
}
}
}
for循環遍歷:經過索引值獲取所對應的數據信息
public class GenericsList {
public static void main(String[] args) {
//建立用戶對象
User user=new User("張三");
User user1=new User("李四");
//建立集合對象,存放用戶對象
List<User> userList=new ArrayList<User>();
userList.add(user);
userList.add(user1);
for(int i=0;i<userList.size();i++){ //(實際存放的數量)
System.out.println(userList.get(i));
}
}
}
5、Set接口
一、概念
繼承了Collection接口,Set中所存儲的元素是不重複的,可是是無序的,Set中的元素是沒有索引的。
二、Set集合接口的實現類
HashSet:底層是哈希碼值,基於HashMap實現的,調用equals方法比較,都返回false。(比較的是虛地址,可重寫equals方法使其同類中的兩個對象,而且將屬性值都賦值爲相同的值,歸爲同一個對象)
TreeSet:元素不重複,而且元素實現了排序(經過實現Set的另外的子接口SortedSet接口實現排序)
能夠給Set集合中的元素進行指定方式的排序。存儲的對象必須實現Comparable接口。
三、HashSet和TreeSet
HashSet的經常使用方法:add(E o)將指定的元素添加到set。
例如:(與ArrayList是相同的)
public class TreeSetExemple {
public static void main(String[] args) {
User user1=new User("張華");
User user2=new User("張星");
Set userSet=new TreeSet();
userSet.add(user1);
userSet.add(user2);
Set<User> userSet1=new HashSet<User>();
userSet1.add(user1);
userSet1.add(user2);
}
}
TreeSet的經常使用方法:add(E o):將指定的元素添加到 set(若是還沒有存在於該set中);
first():返回已排序set中當前的第一個(最小)元素;
last():返回已排序set中當前的最後一個(最大)元素。
TreeSet中存放的對象須要實現Comparable
例如:
public class UserInfo implements Comparable<UserInfo> {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(UserInfo o) { (判斷條件本身定義)
if(o.getName().equals(name)){
return 0;
}else return 1;
}
}
public class TreeSetExemple {
public static void main(String[] args) {
UserInfo user1=new UserInfo();
user.setName("張華");
UserInfo user2=new UserInfo();
user2.setName("王華");
Set<UserInfo> userSet =new TreeSet<UserInfo>();
userSet.add(user1);
userSet.add(user2);
}
}
四、HashSet和TreeSet的遍歷
加強for循環
public class SetExemple {
public static void main(String[] args) {
User user1=new User(「王輝");
User user2=new User("qw");
Set<User> userSet=newHashSet<User>();
Set<User> userSet=new TreeSet<User>();
userSet.add(user1); userSet.add(user2);
//加強for循環遍歷
for(User user:userSet ){
System.out.println( user.getUserName());
}
}
}
6、Map集合的經常使用實現類
一、HashMap
HashMap中元素的key值不能重複,即彼此調用equals方法,返回爲false。排列順序是不固定的。
a、HashMap的經常使用方法
put<key,value>—>存放對象;
get(key);—>獲取key所對應的數據;
keySet() —> 返回此映射中所包含的鍵的 set 視圖。
b、HashMap的使用
public class HashMapTest {
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王輝");
HashMap<String,User> map=new HashMap<String, User>();
map.put(「001", user1);
map.put(「002", user2);
}
}(運行須要建立User類,寫有參構造set、get、toString方法)
二、TreeMap
a、TreeMap的經常使用方法與HashMap相似
b、TreeMap的應用
適用於按天然順序或自定義順序遍歷鍵(key);
TreeMap根據key值排序,key值須要實現Comparable接口,實現compareTo方法。TreeMap根據compareTo的邏輯,對 key進行排序
User user1=new User("王敏");
User user2=new User("王輝");
TreeMap<String,User> tree=new TreeMap<String,User>();
tree.put(「001", user1);
tree.put(「002", user2);
(根據字符串的字典順序)
TreeMap排序:
public class ScortInfo implements Comparable<ScortInfo> {
private int num; public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public int compareTo(ScortInfo o) {
Return new Integer(this.num).compareTo(o.getNum());
}
public ScortInfo(int num) {
this.num = num;
}
}
public class TreeMapTest {
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王輝");
TreeMap<ScortInfo,User> tree=new TreeMap<ScortInfo,User>();
tree.put(new ScortInfo(12), user1);
tree.put(new ScortInfo(23), user2);
}
}
三、TreeMap和HashMap的遍歷
public static void main(String[] args) {
User user1=new User("王敏");
User user2=new User("王輝");
HashMap<String,User> map=new HashMap<String, User>();
map.put(「001", user1);
map.put(「002", use2);
Set set=map.entrySet();
Iterator<Entry<String, User>> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next().getValue().getUserName());
}
TreeMap<String,User> tree=new TreeMap<String,User>();
tree.put(「001", user1);
tree.put(「002", user2);
Set se=tree.entrySet();
Iterator<Entry<String, User>> iter=se.iterator();
while(iter.hasNext()){
System.out.println(iter.next().getValue().getUserName());
}
}(僞代碼)