comparable接口
实现comparable接口的类,对象之间可以比较大小。
comparable接口中只有一个方法
public int compareto(object obj);
该方法:返回 0 表示this == obj
返回正数表示this > obj
返回负数表示this > obj
实现了comparable接口的类通过compareto方法确定对象的排序方式。
可以通过sort()方法排序。
数据结构的选择:
衡量标准:读的效率和改的效率
array读快写慢
linked改快读慢
hash两者之间
map接口
实现了map接口的类用来存储键-值对。
map接口的实现类有hashmap和treemap等。
map类中存储的键-值对通过键来标识,所以键值不能重复。
object put(object key,object value);//如果key已经存在,则返回原key的值value
object get(object key);
object remove(object key);
boolean containskey(object key);
boolean containsvalue(object value);
int size();
boolean isempty();
void putall(map t);
void clear();
用hashcode()方法来比较。
泛型:
增强程序的可读性和稳定性
在定义集合时同时定义集合中对象的类型
示例:
import java.util.*;
public class testargswords{
private static final int one = 1;
public static void main(string[] args){
map<string, integer> m =new hashmap<string, integer>(); //泛型
for(int i = 0;i < args.length;i++){
int freq = (integer) m.get(args[i]) == null ? 0:(integer) m.get(args[i]);
m.put(args[i], freq + 1);
}
system.out.println(m.size() + " distinct words detected:");
system.out.println(m);
}
}
可以在定义collection的时候指定
也可以在循环时使用iterator指定
list接口
list接口是collection的子接口,实现list接口的容器类中的元素是有顺序的,而且可以重复。
list容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
jdk所提供的list容器类有arraylist,linkedlist等。
object get(int index);
object set(int index, object element);
void add(int index, object element);
object remove(int index);
int indexof(object o);
int lastindexof(object o);
list常用算法:
类java.util.collections提供了list里常用的算法:
void sort(list); //对list容器内的元素排序
void shuffle(list); //对list容器内的对象进行随机排序
void reverse(list); //对list容器内的对象进行逆序排序
void fill(list, object); //用一个特定的对象重写整个list容器
void copy(list dest,list src); //将src list容器内容拷贝到dest list容器
int binarysearch(list,object); //对顺序的list容器,采用折半查找的方法查找特定对象
set接口及其实现子类
set接口是collection的子接口,set接口没有提供额外的方法,但实现set接口的容器类中的元素师没有顺序的,而且不可以重复。
set容器可以与数学中的“集合”的概念相对应。jdk api中提供的set容器类有hashset,treeset等。
例子:
import java.util.*;public class testset{ public static void main(string[] args){ set s1 = new hashset(); set s2 = new hashset(); s1.add("a");s1.add("b");s1.add("c"); s2.add("d");s2.add("a");s2.add("b"); set sn = new hashset(s1); sn.retainall(s2); //求交集 set su = new hashset(s1); su.addall(s2); //求并集 system.out.println(sn); system.out.println(su); }}