都在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) ;
}
}
};

  

  

  

 

 

  

  

  

 

 

 

 

  

  

  

 

  

 

 

java类集: collection, list , set, map的更多相关文章

  1. 专题笔记--Java 类集框架

    Java 类集框架 1. Java类集框架产生的原因 在基础的应用中,我们可以通过数组来保存一组对象或者基本数据,但数组的大小是不可更改的,因此出于灵活性的考虑和对空间价值的担忧,我们可以使用链表来实 ...

  2. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  3. Java类集框架详细汇总-底层分析

    前言: Java的类集框架比较多,也十分重要,在这里给出图解,可以理解为相应的继承关系,也可以当作重要知识点回顾: Collection集合接口 继承自:Iterable public interfa ...

  4. 浅谈java类集框架和数据结构(1)

    在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...

  5. java:类集操作总结

    java:类集操作总结 1.List接口允许有重复的元素,Set接口中不允许有重复的元素 2.ArrayList,和Vector的区别 3.set依靠equals和hashCode区分 4.TreeS ...

  6. java:类集操作,多对多的关系

    java:类集操作,多对多的关系 //一个课程有多个学生报名, //一个学生可以报名多个课程 demo.java, Student.java, Course.java' public class Co ...

  7. Java类集 List, Set, Map, Stack, Properties基本使用

    首先看下继承结构: ArrayList(常用): /** * List接口继承Collection接口 * ArrayList, Vector为List接口的实现类 * add()添加新元素,remo ...

  8. 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。

    一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...

  9. Java -- Java 类集 -- 目录

    13.1 认识类集 13.1.1 基本概念 13.1.2 类集框架主要接口 13.2 Collection接口 13.2.1 Collection接口的定义 13.2.2 Collection子接口的 ...

随机推荐

  1. linux的学习系列 1---简介

    Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Linu ...

  2. MVVM的架构设计与团队协作 with StoryBoard

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  3. Android:TextView最小行数设置

    我们有时候为了保证TextView必须有一个最小的高度,那么就需要设置这个行数. 因为如果你不设置的话,在measure这个TextView的时候,此时就无法准确的得到一个最小高度.因为设备不同,所以 ...

  4. HDU ACM 1495 非常可乐(广搜BFS)

    非常可乐 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  5. Log4j NDC MDC

    NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(contex ...

  6. CodeForces 412D Giving Awards

    根据给出的条件建边,然后进行dfs 对于某个点x,当x的后继都遍历完毕后,再输出x节点. 这样能保证所有约束条件. #include<cstdio> #include<cstring ...

  7. CentOS服务端口开放

    #例如开放81端口iptables -I INPUT -i eth0 -p tcp --dport 81 -j ACCEPTiptables -I OUTPUT -o eth0 -p tcp --sp ...

  8. PHP使用Redis

    首先确保安装了Redis扩展 详细的使用方式 请浏览扩展文档 https://github.com/phpredis/phpredis#connection $obj = new Redis(); $ ...

  9. Sichuan State Programming Contest 2012 C。Counting Pair

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=118254#problem/C 其实这道题目不难...就是没有仔细分析... 我们可以发现 ...

  10. C#入门经典第八章面向对象编程-3-Windows应用程序中的OOP

    实例一:使用对象.代码如下: 首先从工具箱中拖一个按钮,并添加事件. private void button2_Click(object sender, EventArgs e) {//按钮的Butt ...