java类集: collection, list , set, map

都在java.util包里.容器:装各种对象. 

Collections类 : 集合工具类, 提供了一些静态方法, 方法里的参数是List等.

Colection接口,子接口主要有:  

Set: 内容不可重复,  子类: HashSet,  TreeSet

       HashSet: 散列存放, 本身没有顺序

       TreeSet: 有序存放, 也是SortedSet的子类

List: 内容可以重复, 子类: LinkedList, ArrayList, Vector

   ArrayList, Vector二者区别:

        1.推出时间:  ArrayList JDK1.2后推出的, Vector属于旧操作类

                   2.性能: ArrayList采用异步处理方式, 性能更高, Vector采用同步处理方式, 性能低

                   3. 线程安全: ArrayList非线程安全, Vector线程安全

                   4. 输出: ArrayList只能使用Iterator, foreach输出, Vector可以使用Iterator, foreach, Enumeration输出

     LinkedList实现了Queue的接口, 大量扩充了List和Queue接口的操作. 在使用时最好直接使用LinkedList类完成操作

Queue: 队列接口

SortedSet:对集合中的数据排序 

Map接口:

  HashMap, 无序存放, 新的操作类, key不允许重复

  HashTable,无序存放, 旧的操作类, key不允许重复

  TreeMap, 可排序的map集合, 按key排序, key不允许重复

  WeakHashMap, 弱引用的map集合,

       IdentityHashMap: key可以重复的map集合

      HashMap和HashTable的区别:

    1. HashMap是JDK1.2后推出的,HashTable属于旧的操作类

      2. HashMap采用异步处理方式, 性能更高, HashTable采用同步处理方式, 性能低

          3. HashMap属于非线程安全的操作类, HashTable属于线程安全的操作类

  SortedMap: 是TreeMap的实现接口, 可以进行排序.

在集合的操作中, 支持一下几种输出: 

Iterator:  最标准的输出, 经常用!!!

ListIterator

foreach

Enumeration

List举例:

一个集合整体插入一个集合:

import java.util.ArrayList ;
import java.util.List ;
import java.util.Collection ;
public class ArrayListDemo01{
	public static void main(String args[]){
		List<String> allList = new ArrayList<String>() ;	// 指定操作的泛型为String
		Collection<String> allCollection = new ArrayList<String>() ;	// 指定一个集合	
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		System.out.println(allList) ;
		allCollection.add("LXH") ;	// 向Collection中加入内容
		allCollection.add("www.mldn.cn") ;
		allList.addAll(allCollection) ;
		allList.addAll(0,allCollection) ;
		System.out.println(allList) ;
	}
};

删除方法: remove:

import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo02{
	public static void main(String args[]){
		List<String> allList = null ;
		allList = new ArrayList<String>() ;	// 指定操作的泛型为String
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		allList.add("MLDN") ;	// 向Collection中加入内容
		allList.add("www.mldn.cn") ;
		allList.remove(0) ; // 删除第一个元素,指定删除的位置
		allList.remove("Hello") ;	// 此方法由Collection接口继承而来
		System.out.println(allList) ;
	}
};

输出, 用size()方法: 此输出方法是list接口独有 的, 尤其是Collection中是没有根据索引取出内容的操作

import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo03{
	public static void main(String args[]){
		List<String> allList = null ;
		allList = new ArrayList<String>() ;	// 指定操作的泛型为String
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		allList.add("MLDN") ;	// 向Collection中加入内容
		allList.add("www.mldn.cn") ;
		System.out.print("由前向后输出:") ;
		for(int i=0;i<allList.size();i++){
			System.out.print(allList.get(i) + "、") ;
		}
		System.out.print("\n由后向前输出:") ;
		for(int i=allList.size()-1;i>=0;i--){
			System.out.print(allList.get(i) + "、") ;
		}
	}
};

可以把集合转换成数组:用toArray方法: 有两种

import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo04{
	public static void main(String args[]){
		List<String> allList = null ;
		allList = new ArrayList<String>() ;	// 指定操作的泛型为String
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		allList.add("MLDN") ;	// 向Collection中加入内容
		allList.add("www.mldn.cn") ;
		String str[] = allList.toArray(new String[]{}) ;	// 指定好类型
		System.out.print("指定数组类型:") ;
		for(int i=0;i<str.length;i++){
			System.out.print(str[i] + "、") ;
		}
		System.out.print("\n返回对象数组:") ;
		Object obj [] = allList.toArray() ;	// 返回Object类型
		for(int i=0;i<obj.length;i++){
			String temp = (String)obj[i] ;	// 进行向下转型
			System.out.print(temp + "、") ;
		}
	}
};

其他功能:

boolean isEmpty(): 判断集合是否为空 , 

List<E> subList(fromIndex,toIndex):截取

int indexOf(): 查找指定的对象是否存在

boolean contains(), 查找是否存在

import java.util.ArrayList ;
import java.util.List ;
public class ArrayListDemo05{
	public static void main(String args[]){
		List<String> allList = null ;
		allList = new ArrayList<String>() ;	// 指定操作的泛型为String
		System.out.println("集合操作前是否为空?" + allList.isEmpty()) ;
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		allList.add("MLDN") ;	// 向Collection中加入内容
		allList.add("www.mldn.cn") ;
		System.out.println(allList.contains("Hello")?"\"Hello\"字符串存在!" : "\"Hello\"字符串不存在!") ;
		List<String> allSub = allList.subList(2,3) ;	// 字符串截取
		System.out.println("集合截取:") ;
		for(int i=0;i<allSub.size();i++){
			System.out.print(allSub.get(i) + "、") ;
		}
		System.out.println("MLDN字符串的位置:" + allList.indexOf("MLDN")) ;
		System.out.println("集合操作后是否为空?" + allList.isEmpty()) ;
	}
};

  

List另一个子类:Vector: 有addElement方法和add方法差不多:

import java.util.Vector ;
import java.util.List ;
public class VectorDemo01{
	public static void main(String args[]){
		List<String> allList = null ;
		allList = new Vector<String>() ;	// 指定操作的泛型为String
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add("Hello") ;	// 此方法由Collection接口而来
		allList.add(0,"World") ;	// 在第一个位置上添加新的内容
		allList.add("MLDN") ;	// 向Collection中加入内容
		allList.add("www.mldn.cn") ;
		for(int i=0;i<allList.size();i++){
			System.out.print(allList.get(i) + "、") ;
		}
	}
};

  

LinkedList实现了Queue,所以有队列的方法:

所以, add方法, 有addFirst, addLast, 还有poll()方法查表头会去掉表头:

import java.util.LinkedList ;
public class LinkedListDemo02{
	public static void main(String args[]){
		LinkedList<String> link = new LinkedList<String>() ;
		link.add("B") ;	// 增加元素
		link.addFirst("A") ;	// 增加元素
		link.addLast("C") ;	// 增加元素
		System.out.println("1-1、element()方法找到表头:" + link.element()) ;
		System.out.println("1-2、找完之后的链表的内容:" + link) ;
		System.out.println("2-1、peek()方法找到表头:" + link.peek()) ;
		System.out.println("2-2、找完之后的链表的内容:" + link) ;
		System.out.println("3-1、poll()方法找到表头:" + link.poll()) ;
		System.out.println("3-2、找完之后的链表的内容:" + link) ;
		
	}
};

可以利用poll方法输出:

import java.util.LinkedList ;
public class LinkedListDemo03{
	public static void main(String args[]){
		LinkedList<String> link = new LinkedList<String>() ;
		link.add("A") ;	// 增加元素
		link.add("B") ;	// 增加元素
		link.add("C") ;	// 增加元素
		System.out.print("以FIFO的方式输出:") ;
		for(int i=0;i<=link.size()+1;i++){
			System.out.print(link.poll() + "、") ;
		}
	}
};

  

Hashset无序存放:

import java.util.HashSet ;
import java.util.Set ;
public class HashSetDemo01{
	public static void main(String args[]){
		Set<String> allSet = new HashSet<String>() ;
		allSet.add("A") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 重复内容
		allSet.add("C") ;	// 重复内容
		allSet.add("D") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println(allSet) ;
	}
};

输出内容:  [D, E, A, B, C]

TreeSet有序存放:

import java.util.TreeSet ;
import java.util.Set ;
public class TreeSetDemo01{
	public static void main(String args[]){
		Set<String> allSet = new TreeSet<String>() ;
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 重复内容
		allSet.add("C") ;	// 重复内容
		allSet.add("D") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("A") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println(allSet) ;
	}
};

结果:  [A, B, C, D, E] 

TreeSet排序原理, 要实现Comparable接口: 如果一个对象数组要排序, 必须实现Comparable接口后重写compareTo方法:

set接口一看hashCode和equals完成重复元素的判断.

import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
	public int compareTo(Person per){
		if(this.age>per.age){
			return 1 ;
		}else if(this.age<per.age){
			return -1 ;
		}else{
			return this.name.compareTo(per.name) ;	// 调用String中的compareTo()方法
		}
	}
};
public class TreeSetDemo02{
	public static void main(String args[]){
		Set<Person> allSet = new TreeSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};

结果:

[姓名:张三;年龄:30, 姓名:李四;年龄:31, 姓名:王五;年龄:32, 姓名:孙七;年龄:33, 姓名:赵六;年龄:33]

去掉重复元素需要重写equals和hashCode方法:

import java.util.Set ;
import java.util.HashSet ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public boolean equals(Object obj){	// 覆写equals,完成对象比较
		if(this==obj){
			return true ;
		}
		if(!(obj instanceof Person)){
			return false ;
		}
		Person p = (Person)obj ;	// 向下转型
		if(this.name.equals(p.name)&&this.age==p.age){
			return true ;
		}else{
			return false ;
		}
	}
	public int hashCode(){
		return this.name.hashCode() * this.age	; // 定义一个公式
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class RepeatDemo01{
	public static void main(String args[]){
		Set<Person> allSet = new HashSet<Person>() ;
		allSet.add(new Person("张三",30)) ;
		allSet.add(new Person("李四",31)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("王五",32)) ;
		allSet.add(new Person("赵六",33)) ;
		allSet.add(new Person("孙七",33)) ;
		System.out.println(allSet) ;
	}
};

  

SortedSet:

import java.util.SortedSet ;
import java.util.TreeSet ;
public class TreeSetDemo05{
	public static void main(String args[]){
		SortedSet<String> allSet = new TreeSet<String>() ;	// 
		allSet.add("A") ;	// 增加内容
		allSet.add("B") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("C") ;	// 增加内容
		allSet.add("D") ;	// 增加内容
		allSet.add("E") ;	// 增加内容
		System.out.println("第一个元素:" + allSet.first()) ;
		System.out.println("最后一个元素:" + allSet.last()) ;
		System.out.println("headSet元素:" + allSet.headSet("C")) ;
		System.out.println("tailSet元素:" + allSet.tailSet("C")) ;
		System.out.println("subSet元素:" + allSet.subSet("B","D")) ;
	}
};

只要看见Sorted开头的接口就是排序接口.

 

最重要的Iterator接口:

import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class IteratorDemo01{
	public static void main(String args[]){
		List<String> all=  new ArrayList<String>() ;	// 
		all.add("hello") ;
		all.add("_") ;
		all.add("world") ;
		Iterator<String> iter = all.iterator() ;	// 为Iterator接口实例化
		while(iter.hasNext()){	// 判断是否有内容
			System.out.println(iter.next()) ;	// 输出内容
		}
	}
};

remove方法,  all.remove(str) ; iter.remove() ; 尽量不要用删除方法

import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class IteratorDemo03{
	public static void main(String args[]){
		List<String> all=  new ArrayList<String>() ;	// 
		all.add("hello") ;
		all.add("_") ;
		all.add("world") ;
		Iterator<String> iter = all.iterator() ;	// 为Iterator接口实例化
		while(iter.hasNext()){	// 判断是否有内容
			String str = iter.next() ;
			if("_".equals(str)){
				all.remove(str) ;	// 删除元素		
			}else{
				System.out.println(str) ;	// 输出内容
			}
		}
		System.out.println("删除之后的集合:" + all) ;
	}
};

结果: 所以尽量不用删除, 如果删除的话, 不要使用集合类的remove方法, 要使用Iterator的remove方法.

hello
删除之后的集合:[hello, world]

  

ListIterator双向输出接口:

import java.util.ArrayList ;
import java.util.List ;
import java.util.ListIterator ;
public class ListIteratorDemo01{
	public static void main(String argsp[]){
		List<String> all = new ArrayList<String>() ;
		all.add("hello") ;
		all.add("_") ;
		all.add("world") ;
		ListIterator<String> iter = all.listIterator() ;
		System.out.print("由前向后输出:") ;
		while(iter.hasNext()){
			String str = iter.next() ;
			System.out.print(str + "、") ;
		}
		System.out.print("\n由后向前输出:") ;
		while(iter.hasPrevious()){
			String str = iter.previous() ;
			System.out.print(str + "、") ;
		}
	}
};

foreach:

import java.util.ArrayList; 
import java.util.List; 
public class ForeachDemo01{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;
		all.add("hello") ;
		all.add("_") ;
		all.add("world") ;
		for(String str:all){
			System.out.print(str + "、") ;
		}
	}
};

Enumration: 一般是操作Vector的.

import java.util.Vector; 
import java.util.Enumeration; 
public class EnumerationDemo01{
	public static void main(String args[]){
		Vector<String> all = new Vector<String>() ;
		all.add("hello") ;
		all.add("_") ;
		all.add("world") ;
		Enumeration<String> enu = all.elements() ;
		while(enu.hasMoreElements()){	//判断是否有内容,hasNext()
			System.out.print(enu.nextElement() + "、") ;	// 输出元素:next()
		}
	}
};

Map接口: HashMap, HashTable,TreeMap, WeakHashMap  

一对key,value对于map来说是一个Map.Entry.

Map: put方法和get方法

import java.util.HashMap ;
import java.util.Map ;
public class HashMapDemo01{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashMap<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		String val = map.get("mldn") ;	// 根据key取出值
		System.out.println("取出的内容是:" + val) ;
	}
};

得到全部key的方法map.keySet()

import java.util.HashMap ;
import java.util.Map ;
import java.util.Iterator ;
import java.util.Set ;
public class HashMapDemo03{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashMap<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		Set<String> keys = map.keySet() ;	// 得到全部的key
		Iterator<String> iter = keys.iterator() ;
		while(iter.hasNext()){
			String str = iter.next() ;
			System.out.print(str + "、") ;
		}
	}
};

输出全部value:

import java.util.HashMap ;
import java.util.Map ;
import java.util.Iterator ;
import java.util.Collection ;
public class HashMapDemo04{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashMap<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		Collection<String> values = map.values() ;	// 得到全部的value
		Iterator<String> iter = values.iterator() ;
		while(iter.hasNext()){
			String str = iter.next() ;
			System.out.print(str + "、") ;
		}
	}
};

HashMap和HashTable下面可以互换:

import java.util.HashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Collection ;
public class HashtableDemo01{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashTable<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		System.out.print("全部的key:") ;
		Set<String> keys = map.keySet() ;	// 得到全部的key
		Iterator<String> iter = keys.iterator() ;
		while(iter.hasNext()){
			String str = iter.next() ;
			System.out.print(str + "、") ;
		}
		System.out.print("\n全部的value:") ;
		Collection<String> values = map.values() ;	// 得到全部的value
		Iterator<String> iter2 = values.iterator() ;
		while(iter2.hasNext()){
			String str = iter2.next() ;
			System.out.print(str + "、") ;
		}
	}
};

 

TreeMap:

import java.util.TreeMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Collection ;
public class TreeMapDemo01{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new TreeMap<String,String>() ;
		map.put("A、mldn","www.mldn.cn") ;	// 增加内容
		map.put("C、zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("B、mldnjava","www.mldnjava.cn") ;	// 增加内容
		Set<String> keys = map.keySet() ;	// 得到全部的key
		Iterator<String> iter = keys.iterator() ;
		while(iter.hasNext()){
			String str = iter.next() ;
			System.out.println(str + " --> " + map.get(str)) ; // 取出内容
		}
	}
};

结果: 有序:但是, 自定义的类要想作为Key的话, 子需要实现Comparable接口指定比较的规则.

A、mldn --> www.mldn.cn
B、mldnjava --> www.mldnjava.cn
C、zhinangtuan --> www.zhinangtuan.net.cn

WeakHashMap, 当一个  map中的某些内容长时间不使用的话, 按照之前的做法不会删除, 如果想自动删除掉的话,可以使用弱引用:

import java.util.WeakHashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Collection ;
public class WeakHashMapDemo01{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new WeakHashMap<String,String>() ;
		map.put(new String("mldn"),new String("www.mldn.cn")) ;
		map.put(new String("zhinangtuan"),new String("www.zhinangtuan.net.cn")) ;
		map.put(new String("mldnjava"),new String("www.mldnjava.cn")) ;
		System.gc() ;	// 强制性进行垃圾的收集操作
		map.put(new String("lxh"),new String("lixinghua")) ;
		System.out.println(map) ;
	}
};

结果:{lxh=lixinghua}

 

通过entrySet获取key和value的方法:

import java.util.HashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
public class IteratorDemo04{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashMap<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		Set<Map.Entry<String,String>> allSet = null ;
		allSet = map.entrySet() ;
		Iterator<Map.Entry<String,String>> iter = null ;
		iter = allSet.iterator() ;
		while(iter.hasNext()){
			Map.Entry<String,String> me = iter.next() ;
			System.out.println(me.getKey() + " --> " + me.getValue()) ;
		}
	}
};

结果:

zhinangtuan --> www.zhinangtuan.net.cn
mldn --> www.mldn.cn
mldnjava --> www.mldnjava.cn

foreach输出:

import java.util.HashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
public class ForeachDemo02{
	public static void main(String args[]){
		Map<String,String> map = null; // 声明Map对象,其中key和value的类型为String
		map = new HashMap<String,String>() ;
		map.put("mldn","www.mldn.cn") ;	// 增加内容
		map.put("zhinangtuan","www.zhinangtuan.net.cn") ;	// 增加内容
		map.put("mldnjava","www.mldnjava.cn") ;	// 增加内容
		for(Map.Entry<String,String> me:map.entrySet()){
			System.out.println(me.getKey() + " --> " + me.getValue()) ;
		}
	}
};

 

用自定义类作为key和value:

1. 以string作为key, person作为value 

import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class HashMapDemo05{
	public static void main(String args[]){
		Map<String,Person> map = null ;
		map = new HashMap<String,Person>() ;
		map.put("zhangsan",new Person("张三",30));	// 增加内容
		System.out.println(map.get("zhangsan")) ;
	}
};

但是反过来就会出错:

import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class HashMapDemo06{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		map.put(new Person("张三",30),"zhangsan");	// 增加内容
		System.out.println(map.get(new Person("张三",30))) ;
	}
};

实例化对象就可以,  

import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
};
public class HashMapDemo06{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		map.put(new Person("张三",30),"zhangsan");	// 增加内容
		System.out.println(map.get(new Person("张三",30))) ;
	}
};

可是这样并不是解决问题的方法, 因为不可能把per对象到处带着走, 应该像string可以使用匿名对象的形式找到内容

此时, 与set接口中判断重复元素的方式一样,进行equals和hashCode方法:

import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年龄:" + this.age ;
	}
	public boolean equals(Object obj){
		if(this==obj){
			return true ;
		}
		if(!(obj instanceof Person)){
			return false ;
		}
		Person p = (Person)obj ;
		if(this.name.equals(p.name)&&this.age==p.age){
			return true ;
		}else{
			return false ;
		}
	}
	public int hashCode(){
		return this.name.hashCode() * this.age ;
	}
};
public class HashMapDemo08{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		map.put(new Person("张三",30),"zhangsan");	// 增加内容
		System.out.println(map.get(new Person("张三",30))) ;
	}
};

所以, 作为key, 或者更准确的说作为对象的时候, 实际上依靠hashCode和equals方法来判断两个匿名对象是否相等.

  

SortedMap:

import java.util.Map ;
import java.util.SortedMap ;
import java.util.TreeMap ;
public class SortedMapDemo{
	public static void main(String args[]){
		SortedMap<String,String> map = null ;
		map = new TreeMap<String,String>() ;	// 通过子类实例化接口对象
		map.put("D、jiangker","http://www.jiangker.com/") ;
		map.put("A、mldn","www.mldn.cn") ;
		map.put("C、zhinangtuan","www.zhinangtuan.net.cn") ;
		map.put("B、mldnjava","www.mldnjava.cn") ;
		System.out.print("第一个元素的内容的key:" + map.firstKey()) ;
		System.out.println(":对应的值:" + map.get(map.firstKey())) ;
		System.out.print("最后一个元素的内容的key:" + map.lastKey()) ;
		System.out.println(":对应的值:" + map.get(map.lastKey())) ;
		System.out.println("返回小于指定范围的集合:") ;
		for(Map.Entry<String,String> me:map.headMap("B、mldnjava").entrySet()){
			System.out.println("\t|- " + me.getKey() + " --> " + me.getValue()) ;
		}
		System.out.println("返回大于指定范围的集合:") ;
		for(Map.Entry<String,String> me:map.tailMap("B、mldnjava").entrySet()){
			System.out.println("\t|- " + me.getKey() + " --> " + me.getValue()) ;
		}
		System.out.println("部分集合:") ;
		for(Map.Entry<String,String> me:map.subMap("A、mldn","C、zhinangtuan").entrySet()){
			System.out.println("\t|- " + me.getKey() + " --> " + me.getValue()) ;
		}
	}
};

结果:

第一个元素的内容的key:A、mldn:对应的值:www.mldn.cn
最后一个元素的内容的key:D、jiangker:对应的值:http://www.jiangker.com/
返回小于指定范围的集合:
    |- A、mldn --> www.mldn.cn
返回大于指定范围的集合:
    |- B、mldnjava --> www.mldnjava.cn
    |- C、zhinangtuan --> www.zhinangtuan.net.cn
    |- D、jiangker --> http://www.jiangker.com/
部分集合:
    |- A、mldn --> www.mldn.cn
    |- B、mldnjava --> www.mldnjava.cn

  

Collections集合工具类:

emptyList(), emptySet(), 这个无法实现再增加数据.

import java.util.Collections ;
import java.util.List ;
import java.util.Set ;
public class CollectionsDemo01{
	public static void main(String args[]){
		List<String> allList = Collections.emptyList() ;	// 返回空的 List集合
		Set<String> allSet = Collections.emptySet() ;	// 返回空的 List集合
		allList.add("Hello") ;	// 加入数据 , 没有实现.
	}
};

 

Collections增加操作: 使用可变数组

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo02{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;
		Iterator<String> iter = all.iterator() ;
		while(iter.hasNext()){
			System.out.print(iter.next() + "、") ;
		}
	}
};

内容反转:

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo03{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;
		Collections.reverse(all) ;	// 内容反转
		Iterator<String> iter = all.iterator() ;
		while(iter.hasNext()){
			System.out.print(iter.next() + "、") ;
		}
	}
};

还有个二分检索功能:

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo04{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;
		int point = Collections.binarySearch(all,"LXH") ;	// 检索数据
		System.out.println("检索结果:" + point) ;
		
	}
};

内容替换:

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo05{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"MLDN","LXH","mldnjava") ;
		if(Collections.replaceAll(all,"LXH","李兴华")){// 替换内容
			System.out.println("内容替换成功!") ;
		}
		System.out.print("替换之后的结果:") ;
		System.out.print(all) ;
		
	}
};

排序操作:

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo06{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"1、MLDN","2、LXH","3、mldnjava") ;
		Collections.addAll(all,"B、www.mldn.cn") ;
		Collections.addAll(all,"A、www.mldnjava.cn") ;
		System.out.println("排序之前的集合:" + all) ;
		Collections.sort(all) ;
		System.out.println("排序之后的集合:" + all) ;
		
	}
};

交换内容:

import java.util.Collections ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Iterator ;
public class CollectionsDemo07{
	public static void main(String args[]){
		List<String> all = new ArrayList<String>() ;	// 返回空的 List集合
		Collections.addAll(all,"1、MLDN","2、LXH","3、mldnjava") ;
		System.out.println("交换之前的集合:" + all) ;
		Collections.swap(all,0,2) ;
		System.out.println("交换之后的集合:" + all) ;
		
	}
};

  

Properties属性:

import java.util.Properties;
public class PropertiesDemo01{
	public static void main(String args[]){
		Properties pro = new Properties() ;	// 创建Properties对象
		pro.setProperty("BJ","BeiJing") ;	// 设置属性
		pro.setProperty("TJ","TianJin") ;
		pro.setProperty("NJ","NanJing") ;	
		System.out.println("1、BJ属性存在:" + pro.getProperty("BJ")) ;
		System.out.println("2、SC属性不存在:" + pro.getProperty("SC")) ;
		System.out.println("3、SC属性不存在,同时设置显示的默认值:" + pro.getProperty("SC","没有发现")) ;
	}
};

往属性文件里写内容:

import java.util.Properties;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class PropertiesDemo02{
	public static void main(String args[]){
		Properties pro = new Properties() ;	// 创建Properties对象
		pro.setProperty("BJ","BeiJing") ;	// 设置属性
		pro.setProperty("TJ","TianJin") ;
		pro.setProperty("NJ","NanJing") ;	
		File file = new File("D:" + File.separator + "area.properties") ;	// 指定要操作的文件
		try{
			pro.store(new FileOutputStream(file),"Area Info") ;	// 保存属性到普通文件
		}catch(FileNotFoundException e){
			e.printStackTrace() ;
		}catch(IOException e){
			e.printStackTrace() ;
		}
	}
};

读取:

import java.util.Properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class PropertiesDemo03{
	public static void main(String args[]){
		Properties pro = new Properties() ;	// 创建Properties对象
		File file = new File("D:" + File.separator + "area.properteis") ;	// 指定要操作的文件
		try{
			pro.load(new FileInputStream(file)) ;	// 读取属性文件
		}catch(FileNotFoundException e){
			e.printStackTrace() ;
		}catch(IOException e){
			e.printStackTrace() ;
		}
		System.out.println("1、BJ属性存在:" + pro.getProperty("BJ")) ;
		System.out.println("2、SH属性存在:" + pro.getProperty("SH")) ;
	}
};

  

 

往xml里写内容:

import java.util.Properties;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class PropertiesDemo04{
	public static void main(String args[]){
		Properties pro = new Properties() ;	// 创建Properties对象
		pro.setProperty("BJ","BeiJing") ;	// 设置属性
		pro.setProperty("TJ","TianJin") ;
		pro.setProperty("NJ","NanJing") ;	
		File file = new File("D:" + File.separator + "area.xml") ;	// 指定要操作的文件
		try{
			pro.storeToXML(new FileOutputStream(file),"Area Info") ;	// 保存属性到普通文件
		}catch(FileNotFoundException e){
			e.printStackTrace() ;
		}catch(IOException e){
			e.printStackTrace() ;
		}
	}
};

从xml读取:

import java.util.Properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class PropertiesDemo05{
	public static void main(String args[]){
		Properties pro = new Properties() ;	// 创建Properties对象
		File file = new File("D:" + File.separator + "area.xml") ;	// 指定要操作的文件
		try{
			pro.loadFromXML(new FileInputStream(file)) ;	// 读取属性文件
		}catch(FileNotFoundException e){
			e.printStackTrace() ;
		}catch(IOException e){
			e.printStackTrace() ;
		}
		System.out.println("1、BJ属性存在:" + pro.getProperty("BJ")) ;
	}
};

  

集合的使用: 一对多:

一个学校有很多学生 , 不知道多大, 所以需要设定集合:

student.java:

public class Student{
	private String name ;
	private int age ;
	private School school; // 一个学生属于一个学校
	public Student(String name,int age){
		this.setName(name) ;
		this.setAge(age) ;
	}
	public void setSchool(School school){
		this.school = school ;
	}
	public School getSchool(){
		return this.school ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name; 
	}
	public int getAge(){
		return this.age ;
	}
	public String toString(){
		return "学生姓名:" + this.name + ";年龄:" + this.age ;
	}
};

school.java:

import java.util.List ;
import java.util.ArrayList ;
public class School{
	private String name ;
	private List<Student> allStudents ;
	public School(){
		this.allStudents = new ArrayList<Student>() ;
	}
	public School(String name){
		this() ;
		this.setName(name) ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public String getName(){
		return this.name; 
	}
	public List<Student> getAllStudents(){
		return this.allStudents ;
	}
	public String toString(){
		return "学校名称:" + this.name ;
	}
};

Test.java:

import java.util.Iterator ;
public class TestDemo{
	public static void main(String args[]){
		School sch = new School("清华大学") ;	// 定义学校
		Student s1 = new Student("张三",21) ;
		Student s2 = new Student("李四",22) ;
		Student s3 = new Student("王五",23) ;
		sch.getAllStudents().add(s1) ;
		sch.getAllStudents().add(s2) ;
		sch.getAllStudents().add(s3) ;
		s1.setSchool(sch) ;
		s2.setSchool(sch) ;
		s3.setSchool(sch) ;
		System.out.println(sch) ;
		Iterator<Student> iter = sch.getAllStudents().iterator() ;
		while(iter.hasNext()){
			System.out.println("\t|- " + iter.next()) ;
		}
	}
};

  

实例二: 学生和课程之间的关系:

student.java;

import java.util.List ;
import java.util.ArrayList ;
public class Student{
	private String name ;
	private int age ;
	private List<Course> allCourses ;
	public Student(){
		this.allCourses = new ArrayList<Course>() ;
	}
	public Student(String name,int age){
		this() ;
		this.name = name ;
		this.age = age ;
	}
	public List<Course> getAllCourses(){
		return this.allCourses ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
	public String toString(){
		return "学生姓名:" + this.name + ";年龄:" + this.age ;
	}
};

course.java;

import java.util.List ;
import java.util.ArrayList ;
public class Course{
	private String name ;
	private int credit ;
	private List<Student> allStudents ;
	public Course(){
		this.allStudents = new ArrayList<Student>() ;
	}
	public Course(String name,int credit){
		this() ;
		this.name = name ;
		this.credit = credit ;
	}
	public List<Student> getAllStudents(){
		return this.allStudents ;
	}
	public void setName(String name){
		this.name = name  ;
	}
	public void setCredit(int credit){
		this.credit = credit ;
	}
	public String getName(){
		return this.name ;
	}
	public int getCredit(){
		return this.credit ;
	}
	public String toString(){
		return "课程名称:" + this.name + ";课程学分:" + this.credit ;
	}
};

test.java:

import java.util.Iterator ;
public class TestMore{
	public static void main(String args[]){
		Course c1 = new Course("英语",3	) ;	// 第一门课程
		Course c2 = new Course("计算机",5) ;	// 第二门课程
		Student s1 = new Student("张三",20) ;
		Student s2 = new Student("李四",21) ;
		Student s3 = new Student("王五",22) ;
		Student s4 = new Student("赵六",23) ;
		Student s5 = new Student("孙七",24) ;
		Student s6 = new Student("钱八",24) ;
		// 第一门课程有三个学生参加
		c1.getAllStudents().add(s1) ;
		c1.getAllStudents().add(s2) ;
		c1.getAllStudents().add(s6) ;
		s1.getAllCourses().add(c1) ;
		s2.getAllCourses().add(c1) ;
		s6.getAllCourses().add(c1) ;
		// 第二门课程有六个学生参加
		c2.getAllStudents().add(s1) ;
		c2.getAllStudents().add(s2) ;
		c2.getAllStudents().add(s3) ;
		c2.getAllStudents().add(s4) ;
		c2.getAllStudents().add(s5) ;
		c2.getAllStudents().add(s6) ;
		s1.getAllCourses().add(c2) ;
		s2.getAllCourses().add(c2) ;
		s3.getAllCourses().add(c2) ;
		s4.getAllCourses().add(c2) ;
		s5.getAllCourses().add(c2) ;
		s6.getAllCourses().add(c2) ;
		// 输出一门课程的信息,观察一门课程有多少个学生参加\
		System.out.println(c1) ;
		Iterator<Student> iter1 = c1.getAllStudents().iterator() ;
		while(iter1.hasNext()){
			Student s = iter1.next() ;
			System.out.println("\t|- " + s) ;
		}
		// 通过学生找到学生参加的课程
		System.out.println(s6) ;
		Iterator<Course> iter2 = s6.getAllCourses().iterator() ;
		while(iter2.hasNext()){
			Course c = iter2.next() ;
			System.out.println("\t|- " + c) ;
		}
	}
};

  

  

  

 

 

  

  

  

 

 

 

 

  

  

  

 

  

 

 

 

 

posted @ 2016-04-28 17:04  wujixing909  阅读(132)  评论(0编辑  收藏  举报