Java修炼笔记11

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值