------- android培训、java培训、期待与您交流! ----------
所有的类集都存放在java.util包中
(一)Collection接口
Collection是保存单值集合的最大父类;在一般开发中很少直接使用Collection,而直接使用其子接口,
子接口主要有:List,Set,Queue,SortedSet。
Collection子接口的定义:
List: 可以存放重复的内容。
Set :不能存放重复的内容,所有的重复内容是靠hashCode()和equals()两个方法区分的。
Queue:队列接口。
SortedSet:可以对集合中的数据进行排序。
1 List接口
List常用的子类:ArrayList和 Vector
两种子类都可以通过对象的多态性,为List实例化
List的操作:
(1).add(int index,E element) 根据索引添加元素
(2)List(remove(String)、remove(int index))中存在两种删除:根据内容、根据编号
(3) 在List接口中提供get()方法,通过size()方法循环输出此方法可以根据索引取出内容,这是List所独具有的;
ArrayList与Vector的区别
a.时间区别: 前者是jdk1.2之后推出、后者jdk1.0推出的
b.性能: 前者采用异步处理方式,性能更高;后者采用同步处理方式,性能较低
c.线程安全: 前者属于非线程安全的操作类;后者属于线程安全的操作类
d.输出: 前者只能用Iterator、foreach输出;后者使用Iterator、foreach、Enumeration输出
2 Queue接口
Queue定义的方法
public E element() 找到链表的标头
public boolean offer(E o) 添加元素到链表结尾
public E peek() 找到表头
public E poll() 删除此表头
public E remove() 检索并删除表头常用子类:
Queue 常用类
LinkedList:链表结构,增删速度快。
取出List集合中元素的方式:
get(int index):通过脚标获取元素。
iterator():通过迭代方法获取迭代器对象。
3 Set接口
Set接口是Collection的子接口,不能加入重复元素
不能像List那样进行双向输出
a.Set接口常用的子类:
HashSet:散列存放
TreeSet:有序存放
b.HsetSet:使用散列存放,本身没有顺序,插入顺序就是保存顺序
c.TreeSet:可以自动进行排序
对对象进行排序时要注意:
如果一个对象想要进性排序操作,则依靠Comparable接口完成。
但就算排好序,我们会发现问题,有的对象因某一个属性重复,排序后对象消失了,
要解决此问题需覆写两个方法:hashCode()和equals()d代码如下:
import java.util.Set ;
import java.util.HashSet ;
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){ //覆写equals,完成对象比较
if(this==obj){
return true ;
}
if(!(obj instanceof Person)){
return false ;
}
Person p = (Person)obj ; //向下转型
if(this.name.equals(p.name)&&this.age==p.age){
return true ;
}else{
return false ;
}
}
public int hashCode(){
return this.name.hashCode() * this.age ; //定义一个公式
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class RepeatDemo02{
public static void main(String args[]){
Set<Person> allSet = new HashSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
System.out.println(allSet) ;
}
};
4 SortSet接口
SortSet和Set接口类似:
比如:TreeSet类也是SortSet的子接口,所以此接口的所有类都是可以排序的;
SortSet定义的方法:
public Comparator<? super E> comparator() 返回与排序有关联的比较器
public E first() 返回集合中的第一个元素
public SortedSet<E> headSet(E toElement)返回从开始到指定元素的集合
public E last() 返回最后一个元素
(二)接口输出
1.Iterator接口
a.在集合的操作中支持一下集中方法输出
Iterator ListIterator foreach Enumeration
b.在使用集合输出时必须形成一个思路:“只要是碰到了集合输出操作, 就一定使用Iterator接口“因为这是最标准的做法
c.Iterator接口的操作原理:
Iterator是专门的迭代输出接口,所谓的迭代输出即使将元素一个个进行判断,判断其是否有内容
如果有就将其输出;
hasNext()判断内容 next()取出内容
d.使用Iterator输出时注意:
List本身存在删除方法(remove()),如果在使用迭代输出的过程中使用
List的删除方法进行删除操作此事代码将会出问题,所以在使用Iterator输出时,
不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove()方法。
2.ListIterator接口
a.Iterator与ListIterator的区别:
Iterator接口主要的功能是有前向后输出,此时如果实现由后向前或者双向输出, 就必须使用Iterator的子接口————ListIterator。
b.虽然此接口可以进行双向输出,但是Collection接口中并没有定义可以为此操作实例化的操作,是有List接口中才存在了ListIterator接口的实例化操作。
c.增加及替换元素
add()
set()
3.foreach及Enumeration接口
1.foreach不尽可以输出数组,实际上还支持集合;
例: import java.util.ArrayList;
import java.util.List;
public class ForeachDemo01{
public static void main(String args[]){
List<String> all = new ArrayList<String>() ;
all.add("hello") ;
all.add("_") ;
all.add("world") ;
for(String str:all){
System.out.print(str + "、") ;
}
}
};
2.Enumeration是最早的集合输出方式,现在使用此接口输出时,一般都是直接操作Vector类完成的。
例:import java.util.Vector;
import java.util.Enumeration;
public class EnumerationDemo01{
public static void main(String args[]){
Vector<String> all = new Vector<String>() ;
all.add("hello") ;
all.add("_") ;
all.add("world") ;
Enumeration<String> enu = all.elements() ;
while(enu.hasMoreElements()){ //判断是否有内容,hasNext()
System.out.print(enu.nextElement() + "、") ; //输出元素:next()
}
}
};
(三)Map接口
1.Map接口与Collection接口的区别:
Collection每次保存的对象都是一个对象,但在Map中保存的是一对对象,形式以: key——>value的形式保存
2.Map接口的常用子类:
HashMap:无序存放,key不允许重复
Hashtable:无序存放,key不允许重复
TreeMap:可以排序,按key排序,key不允许重复
WeakHashMap:弱引用的Map集合,当内容不再使用时,可以清楚无用数据,可以使用gc进行回收。
IdentityHashMap:key可以重复的Map集合
3.Map接口的注意事项:
a.Map的输出
对于Map接口来说,其本身是不能直接使用迭代进行输出,因为Map中的每个位 置存放的是一对值,而Iterator中每次只能找到
一个值。所以,如果此时非要使用迭代进行输出的话,则必须按照以下步骤完成:
(1)将Map的实例通过entrySet()方法变为Set接口与对象:
(2)通过Set接口实例为Iterator实例化;
(3)通过Iterator迭代输出,每个内容都是Map.Entry的对象;
(4)通过Map.Entry进行key——>value的分离
b.直接使用非系统类作为key
如果要使用非系统类作为Map的key,则此类必须覆写Object类中的hashCode()和equals()方法;
作为key,或者更准确的说是作为对象的时候,实际上是依靠hashCode()和equals()来判断两个匿名对象是否相等,这一点有系统内部自动完成。
------- android培训、 java培训、期待与您交流! ----------