Java集合常用类的基本操作:
LinkedList:
package Collection;
import java.util.*;
public class TLinkedList {
public static void main(String[] args) {
LinkedList linkedlist = new LinkedList();
linkedlist.add(1); //向集合类中添加元素
linkedlist.add(2);
linkedlist.add(3);
linkedlist.add("zhangsan");
linkedlist.add("lisi");
for(Iterator it = linkedlist.iterator(); it.hasNext(); ) { //遍历集合类
System.out.println(it.next());
}
linkedlist.add(2, "wangmazi"); //向集合类中固定位置添加元素
System.out.println(linkedlist.getFirst()); //获得集合类中第一个元素
System.out.println(linkedlist.getLast()); //获得集合类中最后一个元素
System.out.println(linkedlist.isEmpty()); //判断集合类是否为空
linkedlist.remove("lisi"); //删除元素“lisi”;
for(Iterator it = linkedlist.iterator(); it.hasNext(); ) { //遍历集合类
System.out.println(it.next());
}
linkedlist.removeLast(); //删除集合类中最后一个元素
System.out.println(linkedlist.size()); //获得元素的个数
System.out.println(linkedlist.hashCode()); //返回集合类的哈希码值
}
}
运行结果:
1
2
3
zhangsan
lisi
1
lisi
false
1
2
wangmazi
3
zhangsan
4
-1190216737
HashSet:
package Collection;
import java.util.*;
public class THashSet {
public static void main(String[] args) {
HashSet<String> set = new HashSet();
set.add("zhangsan"); //添加元素
set.add("lisi");
set.add("wangmazi");
for(String s: set) { //遍历集合类
System.out.println(s);
}
set.remove("wangmazi"); //删除元素"wangmazi"
for(Iterator it = set.iterator(); it.hasNext(); ) {
String s = (String)it.next();
System.out.println(s);
}
set.removeAll(set); //删除所有元素
System.out.println("clear");
for(Iterator it = set.iterator(); it.hasNext(); ) {
String s = (String)it.next();
System.out.println(s);
}
System.out.println(set.isEmpty()); //判断集合类是否为空
System.out.println(set.contains("zhangsan")); //判断集合类是否包含某个元素,包含则返回true
}
}
运行结果:
lisi
zhangsan
wangmazi
lisi
zhangsan
clear
true
false
HashMap:
package Map;
import java.util.*;
public class THashMap {
public static void main(String[] args) {
Map<Integer, String> hashmap = new HashMap<Integer, String>();
hashmap.put(1, "zhangsan"); //向集合类中添加元素
hashmap.put(2, "lisi");
hashmap.put(3, "wangmazi");
for(Map.Entry<Integer, String> entry: hashmap.entrySet()) { //遍历集合类
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
hashmap.clear(); //删除所有元素
System.out.println(hashmap.isEmpty()); //判断集合类是否为空
}
}
运行结果:
Key: 1 Value: zhangsan
Key: 2 Value: lisi
Key: 3 Value: wangmazi
true
其余常用类大部分基本操作与以上三种类相同,在此就不一一举例。
Collection, List, Set之间的联系和区别:
Collection是集合类的基本接口,它用来说明作为一个集合类应有的结构特征属性和共性操作方法。List, Set是Collection的子接口,List接口规定集合类元素具有可控制的顺序,但并没有定义或限制按什么顺序(相当于列表);而Set接口没有集合类元素具有可控制的顺序,但规定集合类元素不能重复(相当于集合),因此Set接口没有像List接口一样对指定位置元素进行操作的方法。
遍历集合对象的常用方法:
遍历集合对象通过遍历接口来实现。遍历接口主要有枚举接口Enumeration和迭代器接口Iterator。它们的共同特点是:先验证有没有相应的指向对象,如果有,再返回指定对象的引用。对集合类对象中的对象元素进行遍历常用Iterator,Enumeration仅限于特定类,如Vector、HashTable等。
for(Iterator it = c.iterator(); it.hasNext(); ) {
MyObject o = (MyObject)it.next();
}
JDK1.5以后:
for(MyObject o: c) {
System.out.println(o);
//o.myMethod(); //调用MyObject定义的myMethod方法
}
详细的例子在文章开头的样例代码中有给出。
同数组相比Vector的特点:
Vector与数组最大区别在于,数组对象创建之后长度就不能改变了,而Vector的存储空间可扩充。
常用集合类比较:
P158
Map、Collection、Iterator之间的关系:
Map和Collection是不同的集合类接口。Iterator是集合遍历接口,所有集合类中都有一个内部类来实现这个接口。
集合类的线程安全问题:
如果集合类存储的对象集合可以被多个线程维护(增加、删除等),则应该选择线程安全的类,如Vector、Stack、HashTable。
如果多个线程只是读取,而不维护,则线程安全没有要求,此时应该选择线程不安全的类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等,因为线程安全的类往往性能较低,所以能选择线程不安全的类就不要用线程安全的类。
定义一个复数类并按照复数的实部大小对复数对象进行排序:
import java.util.*;
public class ComplexSort {
static class Complex{
double real,image;
Complex(double real, double image){
this.real = real;
this.image = image;
}
}
public static void main(String[] args) {
double mint;
int k;
Complex t = null;
LinkedList<Complex> linkedlist = new LinkedList();
Complex cp1 = new Complex(5,3);
Complex cp2 = new Complex(7,6);
Complex cp3 = new Complex(1,5);
Complex cp4 = new Complex(2,3);
Complex cp5 = new Complex(9,8);
linkedlist.add(cp1);
linkedlist.add(cp2);
linkedlist.add(cp3);
linkedlist.add(cp4);
linkedlist.add(cp5);
for(int i = 0; i < linkedlist.size(); i++) {
mint = linkedlist.get(i).real;
k = i;
for(int j = i; j < linkedlist.size(); j++) {
if(linkedlist.get(j).real < mint) {
mint = linkedlist.get(j).real;
k = j;
}
}
t = linkedlist.get(i);
linkedlist.set(i,linkedlist.get(k));
linkedlist.set(k,t);
}
for(Complex c:linkedlist) {
System.out.println(c.real);
}
}
}
运行结果:
1.0
2.0
5.0
7.0
9.0