Collection接口用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。
集合的定义:
集合是包含多个对象的简单对象,所包含的对象称为元素。集合里面可以包含任意多个对象,数量可以变化;同时对对象的类型也没有限制,也就是说集合里面的所有对象的类型可以相同,也可以不同。
Collection集合主要是三类:set,List,Map.
set和list 继承Collection
set和Collection的自带函数差不多,可以去查看API。
Map是单独的。以<key>,<value>
“集合框架”支持Set接口两种普通的实现:HashSet和TreeSet。在更多情况下,会使用HashSet存储重复自由的集合。考虑到效率,添加到HashSet的对象需要采用恰当分配散列码的方式来实现hashCode()方法。当需要从集合中以有序的方式抽取元素时,TreeSet实现会有用处。为了能顺利进行,添加到TreeSet的元素必须是可排序的。
set中的Hashset,TreeSet。
“集合框架”支持Set接口两种普通的实现:HashSet和TreeSet。在更多情况下,会使用HashSet存储重复自由的集合。考虑到效率,添加到HashSet的对象需要采用恰当分配散列码的方式来实现hashCode()方法。当需要从集合中以有序的方式抽取元素时,TreeSet实现会有用处。为了能顺利进行,添加到TreeSet的元素必须是可排序的。
Set中的部分内部方法{boolean contains( Object obj )
boolean addAll( Collection collection ) //取并集
void clear()
void removeAll( Collection collection )
void retainAll( Collection collection ) //取交集}
(HashSet)添加对象,排序可能是乱序的,相当于一个罐子,放进去后没有标记,但是不能有重复的。
(Treeset)排序时候,对象积要自己去实现 implements Comparable。自己去写按什么比较,根据自己写的去比较。
List(arraylist和 Linkedlist)
boolean addAll(int index, Collection collection)
Object get(int index) //获取指定位置的元素
int indexOf(Object element)
int lastIndexOf(Object element)
Object remove(int index)
Object set(int index, Object element) //替换指定位置的元素
List subList(int fromIndex, int toIndex)
getFirst()、getLast()
removeFirst()、removeLast()
package cn.hncu.collection;
import java.util.ArrayList;
public class Myque {
ArrayList list=new ArrayList();
int index=0;
public void in(Object obj ){
list.add(obj);
index++;
}
public Object out(){
Object obj =list.remove(0);
index--;
return obj;
}
}
package cn.hncu.collection;
import java.util.ArrayList;
public class Mystack {
ArrayList list =new ArrayList();
int dex=0;
public void push(Object obj){
list.add(obj);
dex++;
}
public Object pop(){
dex--;
Object obj =list.remove(dex);//获得弹出取得值;
// Object num=list.get(dex);//获得一出去的对象;
return obj;
}
}
内部就不用自己去用对象数组,直接用集合的自带函数,这让我们省去了很多麻烦。
2)List中添加了下标index的功能,这样对List的修改可以利用set方法对指定位置的元素直接进行替换,
3)Collection用Iterator迭代器,而List可以用ListIterator列表迭代器。前者只能next(),
在什么时候使用list的子类呢?
但如果要频繁的从列表的中间位置添加和除去元素,而只要顺序的访问列表元素,那么LinkedList实现更好。
Object remove(Object key)//移除key
void putAll(Map mapping)//添加所有的map值
void clear()//清除所有的元素
Object get(Object key)//获得key的对象
package cn.hncu.collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class hashMap {
public static void main(String[] args) {
HashMap hash=new HashMap();
//增 必须增加key和 values的值同时增加
hash.put(12 , "哈市");
hash.put(121 , "哈撒旦");
hash.put(11 , "哈asd");
hash.put(75 , "哈的撒");
hash.put(16 , "哈发的");
//删 只需要删除(移除)key 就行
hash.remove(121);
//改
hash.put(75, "新新");
//查(输出)
print1(hash);//key进行遍历
print2(hash);//entry 进行遍历
print3(hash);//key进行遍历
}
/*
* 法一 通过key视图
*/
private static void print1(HashMap hash) {
Set set =hash.keySet();//直接通过keyset来获得Set类型
Iterator it =set.iterator();//拥有Set的迭代器进行遍历
while(it.hasNext()){
int key =(Integer) it.next();//获得key的值
String value =(String) hash.get(key);//获得value的值
System.out.println("key:"+key+","+"value:"+value);
}
}
/*
* 法 2 通过entry试图
*
*/
private static void print2(HashMap hash){
Set set=hash.entrySet();//entry 视图进行遍历, 首先必须通过entrySet得到set
Iterator it =set.iterator();//得到迭代器
while(it.hasNext())
{
Map.Entry entry=(Entry) it.next();//获得entry 变量
int key=(Integer) entry.getKey();//分别获得key ,value
String value =(String) entry.getValue();
System.out.println(key+","+value);
}
}
private static void print3(HashMap map){
Collection col=map.values();//返回的是Collection类型的.
Iterator it =col.iterator();
while(it.hasNext()){
String values =(String) it.next();
System.out.println(values);
}
}
}
java.text.Collator类,提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。
package cn.hncu.collection;
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapdemo {
public static void main(String[] args) {
map1();//一般的排序,
map2();//中文 作为关键字 进行排序
}
private static void map2( ) {
TreeMap map =new TreeMap( new SortMap2());//treeMap 通过这个自己写的SortMap2进行排序(带中文)
map.put("你", 22);
map.put("我", 221);
map.put("它", 224);
map.put("我们", 2212);
map.put("你门", 222);
print(map);
}
private static void map1() {
TreeMap map =new TreeMap( new Sortmap());//treeMap 通过这个自己写的SortMap2进行排序(字符比较)
map.put(1, "老大");
map.put(5, "老2");
map.put(3, "老3");
map.put(2, "老4");
map.put(71, "老5");
map.put(7, "老6");
map.put(22, new Person(11, "wqewq", 2));
print(map);
}
private static void print(TreeMap map) {
Set set=map.entrySet();
Iterator it =set.iterator();
while(it.hasNext()){
Map.Entry entry =(Entry) it.next();
// int key =(Integer) entry.getKey();
// String value =(String) entry.getValue();//若是这样写,当value带所有对象 无法转换成STring 所以直接写方便
System.out.println(entry.getKey()+","+entry.getValue());
}
}
}
class Sortmap implements Comparator{
@Override
public int compare(Object m, Object n) {
int x= m.toString().compareTo(n.toString());//返回整数,若较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负、零或正整数
return x;
}
}
class SortMap2 implements Comparator{
Collator col =Collator.getInstance();//java.text.Collator, 获取当前默认语言环境的 Collator。
public int compare(Object o1, Object o2) {
CollationKey key1=col.getCollationKey(o1.toString());//将该 String 转换为一系列可以和其他 CollationKey 按位进行比较的位。
CollationKey key2=col.getCollationKey(o2.toString());
return key1.compareTo(key2);//返回
}
}