Oracle培训(十一)——Core Java第十一章知识点总结——集合
Core Java第十一章知识点总结——集合
知识点预览
集合的概念
集合中的接口
ArrayList
LinkedList
HashSet
TreeSet
HashMap
HashTable
TreeMap
集合关系
Collections工具类
JDK 5.0及更高版本中增加的新特性
集合的概念
1.集合的概念
a)集合是Java中提供的一种类型,用于存储管理对象
b) 为什么不用数组
i.数组难于扩充
ii.不好进行插入和删除
c)集合存储的真是对象吗?
存储的是对象的引用
d) 集合的分类
List 有顺序可重复(有序是可重复的前提)例:上课
Set 无序不可重复(无序注定不可重复)例:大学老师
Map 键值对 keyvalue键值不可重复例:角色演员表
2. 集合中的几种接口
a) List接口
b) Set接口
c) Map接口
List接口
1. List接口
boolean add(Object o);
boolean isEmpty();
boolean remove(Object o);
void clear();
int size();
Iterator iterator();//遍历
Object get(int index);
ArrayList
1. ArrayList是List接口的实现类
import java.util.*;
List l = new ArrayList();
从0开始
2. Iterator遍历
Iterator i = List. iterator();
public boolean hasNext();
public Object next();//指针往下走一格
3. List排序
a)void Collections.sort(List);//默认升序
自动排序阿拉伯字母1-9,字母:a-z,A-Z,字符串比较首字母,相同比较第二个,以此类推。
b) 对Student类进行排序 //出现异常,不知道排序规则
c)Comparable接口
public int compareTo(){
当前对象排序的属性值 < 给定对象对应属性的值 return 负数
当前对象排序的属性值 == 给定对象对应属性的值 return 0
当前对象排序的属性值 > 给定对象对应属性的值 return 正数
负零正(升序) 正零负(降序)
}
eg:return this.age – age;
package chp11.ex06;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
*
* @Author: Wentasy
* @FullName: TestList2.java
* @Description: 对象排序 实现Comparable接口 重写compareTo方法
* @Create Date: 2012-8-15
*/
class Student implements Comparable{
private String name;
private int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
/*
public int compareTo(Object o) {
当前对象排序的属性值 < 给定对象对应属性的值 return 负数
当前对象排序的属性值 == 给定对象对应属性的值 return 0
当前对象排序的属性值 > 给定对象对应属性的值 return 正数
}
public int compareTo(Object o){
Student s = (Student)o;
return this.compareTo(s.getName());
}
*/
public int compareTo(Object o){
Student s = (Student)o;
if(this.age<s.age)return -1;
else if(this.age == s.age)return 0;
else return 1;
}
/*
public int compareTo(Object o) {
Student s = (Student)o;
return this.age-s.age;
}
*/
}
public class TestList2 {
public static void main(String args[]){
Student s1 = new Student("sun2",20);
Student s2 = new Student("sun1",10);
Student s3 = new Student("sun3",30);
List l = new ArrayList();
l.add(s1);
l.add(s2);
l.add(s3);
Collections.sort(l);
Iterator i = l.iterator();
while(i.hasNext()){
Student s = (Student)i.next();
System.out.println(s.getName());
}
}
}
d)String + 8种包装类默认已经实现了Comparable接口
e) List排序原理
Comparable接口达成了使用者和提供者之间的约定
4.List接口的实现类
a) ArrayList和LinkedList
b) ArrayList和Vector
Set接口
1.Set接口
boolean add(Object o);
boolean isEmpty();
boolean remove(Object o);
void clear();
int size();
Iterator iterator();//遍历
HashSet
1.HashSet:无顺序
2. HashSet:不可重复
元素对应的对象的内容不可重复
3. HashSet怎样存储对象
a) Object类中定义了public int hashCode();
b) HashSet怎样存储对象
i.调用hashCode
ii.当hashCode值满足条件时,再调用equals方法
c) hashCode:决定一个对象放在哪个桶(内存)里
d) 对象内容相同,hashCode值相同,放在同一桶里,把重复数据过滤掉(覆盖)
4.hashCode方法的覆盖建议
public int hashCode(){
returnage;
}
public int hashCode(){
return name.hashCode() & 1;//字符串已经覆盖了hashCode()
}
TreeSet
1. SortedSet接口的实现类
2. 可以排序,不可重复
3. 元素必须实现Comparable接口
4. 所有的Set接口的实现类对重复元素的处理不同
package chp11.ex11;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
/**
*
* @Author: Wentasy
* @FullName: TestSet2.java
* @Description: TreeSet compareTo方法的重写优化
* @Create Date: 2012-8-15
*/
class Student implements Comparable{
private String name;
private int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public int compareTo(Object o){
Student s = (Student)o;
if(this.age!=s.age)return this.age - s.age;
else return this.name.compareTo(s.name);
}
}
public class TestSet2 {
public static void main(String args[]){
Student s1 = new Student("sun2",20);
Student s2 = new Student("sun1",30);
Student s3 = new Student("sun3",30);
Student s4 = new Student("sun3",30);
Set set = new TreeSet();
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
Iterator i = set.iterator();
while(i.hasNext()){
Student s = (Student)i.next();
System.out.println(s.getName());
}
}
}
5.TreeSet过滤重复是以compareTo方法中判断两个内容是否相等作为判断重复数据的依据
Collection接口
Map接口
java.util.Map接口
key不可以重复,value可以重复
put(Object ket,Object value);
get(Obejct key);
remove(Objectkey);
clear();
isEmpty();
size();
HashMap
1. HashMap的常规使用
Map m = new HashMap();
2.HashMap的key也是通过Hash算法过滤重复数据
覆盖equals方法和hashCode
2. Map的key一般都应用String
3. Map的遍历
a) 值遍历
package chp11.ex13;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
*
* @Author: Wentasy
* @FullName: TestMap1.java
* @Description: 值遍历
* @Create Date: 2012-8-15
*/
public class TestMap1 {
public static void main(String args[]){
Map m = new TreeMap();
m.put("key1", "value1");
m.put("key3","value2");
m.put("key1", "value4");
m.put("key2", "value2");
Collection c = m.values();
Iterator i = c.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
b) 键遍历
package chp11.ex13;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
*
* @Author: Wentasy
* @FullName: TestMap2.java
* @Description: 键遍历
* @Create Date: 2012-8-15
*/
public class TestMap2 {
public static void main(String args[]){
Map m = new TreeMap();
m.put("key1", "value1");
m.put("key3","value2");
m.put("key1", "value4");
m.put("key2", "value2");
Set s = m.keySet();
Iterator ii = s.iterator();
while(ii.hasNext()){
System.out.println(ii.next());
}
}
}
c) 键值遍历
package chp11.ex14;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
*
* @Author: Wentasy
* @FullName: TestMap1.java
* @Description: 键值遍历
* @Create Date: 2012-8-15
*/
public class TestMap1 {
public static void main(String args[]){
Map m = new HashMap();
m.put("key1", "value1");
m.put("key2", "value2");
m.put("key3","value2");
m.put("key1", "value4");
//
// Set s = m.keySet();
// Iterator ii = s.iterator();
// while(ii.hasNext()){
// Object key = ii.next();
// System.out.println(key+" = "+m.get(key));
// }
// 错误的遍历方式 每调用一次next 指针往前移
Set s = m.keySet();
Iterator ii = s.iterator();
while(ii.hasNext()){
System.out.println(ii.next()+" = "+m.get(ii.next()));
}
}
}
TreeMap
1. TreeMap可以对key应用排序
2.TreeMap的key是通过Comparable接口过滤重复排序
3. Map的key一般都应用String
HashMap与HashTable
集合关系(5.0以前)
Collections工具类
Object max(Collection)
Object min(Collection)
shuffle(List) //打乱list顺序
List synchroniedList(List)//将ArrayList变成线程安全
package chp11.ex16;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
*
* @Author: Wentasy
* @FullName: TestCollections.java
* @Description: Collections工具类的使用
* @Create Date: 2012-8-15
*/
public class TestCollections {
/*
* 集合可以存简单类型 是jdk5新特性 集合部分没有讲解
*/
public static void main(String args[]){
List<String> src = new ArrayList<String>();
src.add("suns1");
src.add("suns2");
src.add("suns3");
List<String> dest = new ArrayList<String>();
Collections.copy(dest, src);
/*
List ll = new ArrayList();
ll.add(1);
ll.add(5);
Integer max = Collections.max(ll);
Integer min = Collections.min(ll);
System.out.println(max);
System.out.println(min);
List src = new ArrayList();
src.add("sun1");
src.add("sun2");
src.add("sun3");
src.add("sun4");
Collections.shuffle(src);
Iterator it = src.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
*/
LinkedList ll = null;
Hashtable s = new Hashtable();
HashMap hm = new HashMap();
System.out.println( s instanceof Map);
}
}
JDK5.0新特性
1.JDK5.0新特性:泛型
List<String>l = new ArrayList<String>();
2. for…each遍历
package chp11.ex18;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* @Author: Wentasy
* @FullName: TestForEach.java
* @Description:for…each遍历的使用
* @Create Date: 2012-8-15
*/
public class TestForEach {
public static void main(String args[]){
List<String> l = new ArrayList<String>();//集合要使用,必加上泛型
l.add("suns");
l.add("suns2");
for(String name:l){
System.out.println("name "+name);
}
}
}
遍历集合、数组(集合要使用,必加上泛型)
3.Queue
a)JDK5.0新特性
b) Collection接口的子接口
c) 实现了FIFO算法(先入先出 队列)
d) LinkedList是其实现类
e) Queue常用API
i.offer(Object)//存对象
ii.Object poll()//获得最先进入的对象 获得后清除
iii.Object peek();//获得最先存入对象 获得后不清除
JDK5.0的集合关系
上一篇: EL表达式中的empty
推荐阅读
-
Oracle培训(十一)——Core Java第十一章知识点总结——集合
-
Oracle培训(十五)——Core Java第十五章知识点总结——网络编程
-
Oracle培训(十)——Core Java第十章知识点总结——Object类 包装类 内部类
-
Oracle培训(九)——Core Java第九章知识点总结——接口
-
Oracle培训(七)——Core Java第七章知识点总结——封装、继承、多态
-
Oracle培训(十三)——Core Java第十三章知识点总结——线程
-
Oracle培训(十二)——Core Java第十二章知识点总结——异常处理
-
Oracle培训(十四)——Core Java第十四章知识点总结——文件与I/O流