一.Collection, list, Set之间的联系和区别?
- Collection:Java.util下的一个接口,是各种集合结构的父接口,List和Set是继承自它的子接口。
- List:List接口是有序的,会精确的将元素插入到指定的位置(允许有相同元素)。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素。常用的实现类有 ArrayList、LinkedList 和 Vector。
- Set:是一种不包含重复元素的Collection接口,只关心元素是否属于Set(不允许有相同元素),而不关心它的顺序。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。
二.遍历一个集合对象都有哪些方法?
可以用for循环,Iterator迭代和forEach循环。
//for循环
for( int i = 0 ; i < list.size() ; i++) {
System.out.println(list.get(i));
}
//迭代器
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
//for each
for(String str : list) {
//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用。
System.out.println(str);
}
四.Vector与ArrayList,LinkedList与ArrayList,Hashtable与HashMap,TreeMap与HashMap之间的共同点和区别。
五.Map、Collection、Iterator之间的关系如何?
- Map接口实现者调用接口方法values()返回一个实现collection接口的集合对象的引用
- collection接口的实现者有可调用iterator()方法返回一个实现Iterator接口的对象引用。
六.Collection和Collections各自的功能是什么?
- Collection是集合类的基本接口,它用来说明作为一个集合类应有的结构特征属性和带有共性的操作方法。子接口主要包含List, Set, Queue。
七.现需要选择集合类,它存储的对象集合可以被多个线程维护(增加、删除),请问应该选择什么样的集合类,为什么?如果多个线程只是读取,而不维护,应该选择什么样的集合类,为什么?
- 选择 Vector类,因为 Vector类的方法是同步的,是线程安全的
- 选择 ArrayList类,因为 ArrayList的方法不是线程同步的,其性能更高
八.如何实现集合对象排序?定义一个复数类并按照复数的实部大小对复数对象进行排序
//方法一:实现自身比较器Comparable
import java.util.*;
public class Complex implements Comparable<Complex>{
private int real, imagin;
public Complex(){
real =0;
imagin =0;
}
public Complex(int r , int i){
real = r;
imagin = i;
}
@Override
public int compareTo(Complex o) {
// TODO Auto-generated method stub
return this.real-o.real;
}
@Override
public String toString(){
if(imagin>0)
return real+"+"+imagin+"i";
else if(imagin==0)
return real+"";
else return real+""+imagin+"i";
}
public static void main(String[] args){
List<Complex> al = new ArrayList<Complex>();
al.add(new Complex(1,3));
al.add(new Complex(-1,0));
al.add(new Complex(10,-5));
System.out.println(al);//排序前
//用Collections类的静态方法排序
Collections.sort(al);
System.out.println(al);//排序后
}
}
九.编写程序测试Java集合框架中各种常用类的 基本操作(包括添加元素,删除元素,查找元素,遍历集合元素等)
import java.util.*;
class TestSort {
public static void main(String[] args) {
List<Integer> al = new ArrayList();
al.add(1);
al.add(4);
al.add(3);
for (int i = 0; i < 3; i++) {
Integer inte = (Integer) al.get(i);
System.out.println(inte);
}
Iterator<Integer> iterator = al.iterator();
while (iterator.hasNext()) {
int i = iterator.next();
if (i == 1) {
iterator.remove(); //正确
}
}
for (int i = 0; i < al.size(); i++) {
Integer inte = (Integer) al.get(i);
System.out.println(inte);
}
}
}
// 1 4 3
//4 3
import java.util.*;
class Testsort {
Map<String,String> calendar = new HashMap<String,String>();
public Testsort(String d[], String i[]){
for (int x=0; x<d.length; x++)
calendar.put(d[x], i[x]);
}
public static void main(String args[]) {
String [] dates = {"10/31/01", "01/01/01", "03/05/01", "02/04/01"};
String [] items = {"Halloween", "New Years", "Birthday", "Anniversary"};
Testsort example = new Testsort(dates, items);
System.out.println("map= " + example.calendar);
Set<Map.Entry<String,String>> mappings = example.calendar.entrySet();
System.out.println("object \t\t\tkey\t\tvalue");
for (Map.Entry<String,String> map : mappings) {
System.out.print( map + "\t");
System.out.print(map.getKey() + "\t");
System.out.println(map.getValue());
}
}
}