1.编写程序测试Java集合框架中各种常用类的基本操作(包括添加元素,删除元素,遍历集合元素等)
-
Collection:Collection是集合类的基本接口,它用来说明作为一个集合类应有的结构特征属性和带有共性的操作方法,有三个子接口
- List
- ArrayList:add(E e),add(int index, E element), get(int index),remove(int index), remove(Object o)
- LinkedList:addFirst(E e),addLast(E e),get(int index), removeFirst(), removeLast()
- Set
- Queue
- List
-
Iterator:对集合类遍历的接口
- hasNext()
- next()
-
ListIterator
- hasPrevious()
- previous();
import java.util.*;
public class TestSort{
public static void main(String[] args){
int sum=0;
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(4);
al.add(Integer.parseInt("8"));
al.add(Integer.valueOf("9"));
al.remove(0);
Iterator<Integer> ir=al.iterator();
System.out.println(al.get(0));
while(ir.hasNext()){
Integer i = ir.next();
System.out.println(i);
}
System.out.println(sum);
LinkedList<String> ll = new LinkedList<String>();
ll.add("h");
ll.add("haha");
ll.add(Integer.toString(9));
ll.addFirst("first");
ll.removeLast();
Iterator<String> ir2=ll.iterator();
while(ir2.hasNext()){
String i = ir2.next();
System.out.print(i);
}
}
}
- Map:Map接口用于将一个键(Key)映射到一个值(Value),且不允许有重复的键,每个键最多映射到一个值。
- Set keySet()方法获取的是映射中关键字集合的一个Set引用
- Collection values()方法返回映射中值集合的一个Collection引用
- Set<Map.Entry<K,V>> entrySet()方法返回一个Set。
import java.util.*;
class Counter{
int i=1;
public String toString(){
return Integer.toString(i);
}
}
public class Statistics{
public static void main(String[] args){
Hashtable<Integer,Counter> ht=new Hashtable<Integer,Counter>();
for(int i=0;i<10000;i++){
Integer r=(int)(Math.random()*20);
if(ht.containsKey(r))
ht.get(r).i++;
else
ht.put(r,new Counter());
}
//遍历集合对象
//方法1:将entry作为一个整体进行遍历
Set<Map.Entry<Integer,Counter>> entries = ht.entrySet();
Iterator<Map.Entry<Integer,Counter>> iter = entries.iterator();
while(iter.hasNext()){
Map.Entry<Integer,Counter> map = iter.next();
Integer inte = (Integer)map.getKey();
Counter value = (Counter)map.getValue();
System.out.println(inte+" = "+value);
}
//方法2:单独取出key集合,遍历key时,取出key所对应的value
Set<Integer> key = ht.keySet();
Iterator<Integer> iter2 = key.iterator();
while(iter2.hasNext()){
Integer i = iter2.next();
Counter c =ht.get(i);
System.out.println(i+" = "+c);
}
}
}
总的来说,Map接口可以通过一些方法(keySet(),entrySet()和values())产生Collection对象,而Collection接口可以通过iterator()方法产生Iterator对象,用于集合的遍历。
2.如何实现集合对象排序
Collections
类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections
类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作。调用其sort方法进行排序, sort(List<T> list, Comparator<? super T> c)
。
集合对象排序接口为Comparator
,通过实现其中的compare方法来定义自己的排序方法。
定义一个复数类并按照复数实部排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
public class Complex {
int a;//实部
int b;//虚部
Complex(int aa,int bb){
this.a=aa;
this.b=bb;
}
public static void main(String[] args){
Complex x = new Complex(3, 4);
Complex y = new Complex(1, 2);
Complex z = new Complex(8, 2);
ArrayList<Complex> al = new ArrayList<Complex>();
al.add(x);
al.add(y);
al.add(z);
Iterator<Complex> ir=al.iterator();
while(ir.hasNext()){
Complex c = ir.next();
System.out.println(c.b+"+"+c.a+"i");
}
//匿名内部类
Collections.sort(al,new Comparator(){
public int compare(Object c1,Object c2){
return ((Complex)c1).a-((Complex)c2).a;
}
});
//排序后
Iterator<Complex> ir2=al.iterator();
while(ir2.hasNext()){
Complex c = ir2.next();
System.out.println(c.b+"+"+c.a+"i");
}
}
}
3.ArrayList和LinkedList比较
Vector和ArrayList的比较
Hashtable和HashMap的比较
TreeMap和HashMap的比较
4.遍历一个集合对象
- 使用for循环语句,用get(index)方法
- 使用foreach语法 for(MyObject o : c)
- 使用Iterator接口
Iterator it = c.iterator();
while(it.hasNext()){
MyObject o = (MyObject)it.next();
……
}
4.Collections和Collection各自的功能是什么?
Collections和Collection是两个不同的概念,前者是一个工具类,通过一些静态方法,完成集合类的一些操作功能,后者是集合接口,用来说明作为一个集合类应有的结构特征属性和带有共性的操作方法。