整理了一下Java中常用的数据结构的用法。
BitSet
当需要表示大量的二进制或者Boolean型数据时可以使用BitSet。BitSet使我们不必使用位运算来得到位的值,并且其长度可以自增长。
下面是一个BitSet的使用小例子:
importjava.util.*;
publicclass DemoMain {
static BitSet on_off_set;
public static void main(String[] args) {
// TODO Auto-generated method stub
on_off_set = new BitSet(10);
on_off_set.set(5);
on_off_set.set(30);
printOnOffSet();
}
static void printOnOffSet() {
for (int i = 0; i < on_off_set.length(); i++) {
System.out.println(i + ":" + on_off_set.get(i));
}
}
}
除了上面的方法以外,BitSet还提供了clear()方法来去除某个index上的标记,使用and(),or(),xor()等方法来与另一个BitSet进行位运算,使用clone()进行复制,使用flip()进行翻转等等。
ArrayList
ArrayList是一种可变长的数组数据结构,比数组更加灵活好用。
下面是一个使用示例:
ArrayList<String>arr = new ArrayList<String>(20);
arr.add("A");
arr.add("B");
arr.add("C");
arr.set(0,"A1");
for(int i = 0; i < arr.size(); i++) {
System.out.println(arr.get(i));
}
intbIndex = arr.indexOf("B");
System.out.println(bIndex);
ArrayList可以使用泛型来确定其元素类型,也可以不指定泛型模板类。除了上面定义的方法,ArrayList中还定义了很多其他的方法,例如clear(),clone(),contains(),isEmpty(),lastIndexOf(),remove(),removeAll(),subList(),toArray()等有用的方法。
除了使用上面的方法来遍历ArrayList,还可以使用迭代器来遍历:
Iterator<String>iter = arr.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
上面的代码同样可以不指定泛型模板类。
Stack
Stack,即堆栈,定义了一个先入后出的元素序列,下面是一个示例代码:
Stack<String>s = new Stack<String>();
s.push("A");
s.push("B");
Stringb = s.peek();
s.pop();
Stringa = s.pop();
s.empty();
Stack和ArrayList一样,可以使用泛型定义,也可以不用。除了上面用到的方法,Stack类中还定义了很多其他的常用方法,例如search等,另外Stack还继承了Vector类的很多方法。
HashMap
HashMap实现Map接口,提供散列映射来存储键值对儿,散列映射的负载系数在0.0~1.0之间,系数越接近1.0,则散列的内存效率越高,查找效率越低,系数越接近0.0。散列映射提供三种构造函数:
HashMap hm = new HashMap(); //默认容量为16,负载系数默认为0.75
HashMap hm = new HashMap(30); //容量30,负载系数默认为0.75
HashMap hm = new HashMap(30,0.5); //容量30,负载系数0.5
使用散列的好处是,在存储的时候,键值实际上是将对象散列为散列码来得到的,并不是通过比较对象和存储对象,这样做对效率就有很大的提升。
下面是散列的一个示例代码:
HashMap<String,Integer> hm = new HashMap<String, Integer>();
hm.put("A",1);
hm.put("B",2);
hm.put("C",3);
hm.put("D",4);
hm.put("E",5);
intsize = hm.size();
booleanisEmpty = hm.isEmpty();
IntegercCount = hm.get("C");
booleanisAIncluded = hm.containsKey("A");
booleanis3Included = hm.containsValue(3);
hm.clear();
上面就是Java中比较常用的数据结构,有问题欢迎留言。