java集合类详解博客园_Java集合类详解

集合类

Java集合类详解

概述

集合类就是一个动态对象数组

与之相关的接口包括

Collection

List

ArrayList

Vector

LinkedList

Set

HashSet

LinkedHashSet (按照插入顺序存放的,不重复的)

SortedSet

TreeSet

Queue

LinkedList

Map

hashMap

weakhashMap

SortedMap

TreeMap

Map.Entry

Iterator

ListIterator

Enumeration 最早的输出的接口

Collection接口

@Override

public boolean contains(Object o) {

return false;

}

@Override

public Iterator iterator() {

return null;

}

@Override

public Object[] toArray() {

return new Object[0];

}

@Override

public T[] toArray(T[] a) {

return null;

}

@Override

public boolean containsAll(Collection> c) {

return false;

}

@Override

public boolean addAll(Collection extends Integer> c) {

return false;

}

@Override

public boolean removeAll(Collection> c) {

return false;

}

@Override

public boolean retainAll(Collection> c) {

return false;

}

@Override

public void clear() {

}

注意 al.retainAll(al1); 相当于求交集然后放在al中 Integer []array1=al.toArray(new Integer[]{});

Object []array2=al.toArray();

两个获得Array的方法,第一个是通过泛型指定了数组的类型,第二个返回的是Object[]数组,使用的时候需要转型

List接口

可以重复 ,可以认为是一个数组,可以通过索引取出数据

List对于Collection有很大的扩充

新增包括

指定位置增加数据

指定位置增加一组数据

取得指定位置数据

在指定位置删除数据

subList(from,to)返回子List

al1=al.subList(0,1);

数据的顺序与插入顺序一样

LinkedList类

同时实现了List和Queue接口,就是一个链表的封装

LinkedList ll=new LinkedList();

ll.add("eq");

ll.add("eq1");

ll.add("eq2");

ll.add("eq3");

ll.addFirst("23");

ll.addLast("233");

System.out.println(ll);

Queue接口

element找到头 offer在队列尾加元素

peek找到头

poll找到头并删除

remove删除头

Set

其中的方法与Collection的完全一样

顺序与插入的顺序无关

不重复的,如果重复插入会忽略

TreeSet

数据是排序的!!,实际上也是SortedSet的一个子类

HashSet

数据散列存放

TreeSet自动排序原理

要排序必须可比较,因此TreeSet指定的类必须实现了Comparable方法

判断重复元素的原理

使用equals和hashCode方法来判断

首先判断hashCoede是否一样,不相同则为不同元素,相同则调用equals()来最终决定,因此将元素加入Set的的时候最好复写这两个方法

对象相等->hashcode一定相等

hashCode相等->对象不一定相等

SortedSet接口

是自动排序的

方法

返回首尾元素

返回任意一段子SortedSet headSet/tailSet/subSet

Iterator接口

Collection的输出方式

Iterator

ListIterator

foreach

Enumeration

集合的输出最好一定是用Iterator接口

Iterator是迭代输出接口

通过Collection.iterator()实例化

hasnext()判断是否有内容,并且移动指针

在使用迭代输出的时候,不要使用集合类的remove方法,而是要用iterator的remove方法,尽量不要再输出时删除

单向操作

ListIterator接口

继承自Iterator

可以双向的输出

只有List接口才有实例化该接口的方法

只能现正向输出,后逆向输出,不能倒过来

List ls=new ArrayList();

ls.add("hello");

ls.add("world");

ls.add("!!!");

ListIterator ll=ls.listIterator();

while (ll.hasNext()){

System.out.print(ll.next());

}

while (ll.hasPrevious()){

System.out.print(ll.previous());

}

foreach

可以用于输出集合或者数组中的内容,定义为:

for(type element: array){

System.out.println(element);

}

举例如下

int s[]={0,1,2,3,4,5};

for(int w:s){

System.out.println(w);

}

List l=new ArrayList();

l.add(2);

l.add(3);

l.add(4);

for(int w:l){

System.out.println(w);

}

int ss[][]={{1,2,3},{4,5,6}};

//这里展示一下不规则数组

int sss[][]=new int[2][];

sss[0]=new int[3];

sss[1]=new int[5];

for(int x[]:ss){

for(int y:x){

System.out.println(y);

}

}

Map接口

Map.Entry接口

是Map的内部接口

指的是一个key->value的对象

实际上Map保存的是Map.Entry的对象,其实也相当于一组对象的集合

常见方法

containsKey

containsValue

get

KeySet 返回Key的Set集合

Values 返回Value的Collection集合

常用的子类

HashMap

HashTable

比较老的类,与HashMap相比类似于ArraList与Vector的关系

TressMap

按照Key的排序类

WeakHashMap

WeakHashMap

当Map的某些内容长期不使用的时候,会自动删除掉

在垃圾回收的时候,会把没有被引用的数据删掉

Map输出,可以获得KeySet然后打印Value,或者使用Map.Entry来迭代输出

Map m=new HashMap();

m.put("1","11"); m.put("2","22");m.put("3","33");

Set> ms=m.entrySet();

//迭代器输出

Iterator> msi=ms.iterator();

while (msi.hasNext()){

Map.Entry me=msi.next();

System.out.println(me.getKey()+" "+me.getValue());

}

//foreach输出

for(Map.Entry me:ms){

System.out.println(me.getKey()+" "+me.getValue());

}

作为Key,实际上是一个Set了,不能重复,是通过equals和hashCode来判断的,所以使用非系统类作为键值的话,应该复写这两个方法

IdentityHashMap

允许key是重复的,比较键(和值)时使用引用相等性代替对象相等性

我们说的Map的键值不能重复,就是说对象equals的时候不能想等。而InentityHashMap中必须使用同一个引用才能认为是相等的

Map mm=new IdentityHashMap();

mm.put(new String("123"),"1");

mm.put(new String("123"),"2");

Set> ms1=mm.entrySet();

for(Map.Entry me:ms1){

System.out.println(me.getKey()+" "+me.getValue());

}

//这段代码可以打印出结果,但是,由于“123”的引用都丢失了,实际上你通过get(i)是取不出来任何数据的

SoretdMap/TreeMap

按照key进行排序,可以获得第一个/最后一个key,获得部分的Map的集合

SortedMap sm=new TreeMap();

sm.put("A","AA");

sm.put("C","CC");

sm.put("B","BB");

System.out.println(sm.lastKey());

System.out.println(sm.firstKey());

sm.subMap("B","C");

对象引用强度说明

强引用

即使jvm内存不足,也不回收这个对象

软引用

内存不足时,才回收

弱引用

不管内存咋样,只要能回收了就回收了

虚引用

跟没有引用一样

Collections 集合操作类

主要的是对于一些常见的集合的操作,都是一些静态的处理方法,可以用到,如下

java.util.Collections.addAll(l, "d", "qwe", "asd");

java.util.Collections.reverse(l);

java.util.Collections.replaceAll(l,"d","ddd");

java.util.Collections.binarySearch(l,"qwe");

java.util.Collections.sort(l);

java.util.Collections.swap(l,2,3);

Stack类

是Vector的子类

Stack stack=new Stack();

stack.push("1");

stack.add(3,"10"); //栈中间加入

stack.peek();//得到栈顶不弹出

stack.search("2");//搜索

Properities 属性类

是hashtable的子类

Properties pro=new Properties();

pro.setProperty("1","11");

pro.setProperty("2","22");

pro.setProperty("3","33");

pro.storeToXML(new FileOutputStream("D:/a.xml"),"MYXML");

Properties pro1=new Properties();

pro1.loadFromXML(new FileInputStream("D:/a.xml"));

pro1.list(System.out);

System.out.println("1"+" "+pro1.getProperty("1"));

可以保存到xml或者普通文件。实际上就是一个Map,可以使用Map的全部操作。通过list可以列出全部的属性。

store和load方法来与文件进行交互!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值