java 集合详解

一、集合与数组的区别

  1. 数组长度固定,集合的长度可以变化
  2. 数组可以存放基本类型数据以及对象的引用,集合不能存放基本类型数据,只能存放对象的引用
  3. 数组不能对元素进行操作,集合可以

二、集合详解

集合的类型分为四种

  1. Set:集合中对象不排序,没有重复对象
  2. List:按照索引位置排序,可有重复对象
  3. Queue:先进先出规则排序,队尾加元素队头删除元素。双向队列允许在队头队尾添加删除元素
  4. Map:每个元素包含一个对象和对应的Key值,Key值不可重复,对象可重复。能实现对Key排序

注意:这四种集合类都是接口,所有实现类都实现了这四种接口而非继承这四种接口。

1、Collection

Queue,List和Set都继承了Collection接口

方法描述
boolean add(Object o)加入对象
void clear()清空集合中对象
boolean contains(Object o)判断是否持有
boolean isEmpty()判断是否是空集合
Iterator iterator()迭代器,包含hasNext()判断集合中元素是否遍历完毕;next()返回下一个元素;remove()删除next()返回的元素 ;
boolean remove(Object o)删除指定对象引用
int size()返回集合中元素个数
Object[] to Array()
<T>T[] toArray(T[] a)
集合中元素打包成数组返回

遍历输出集合中元素示例:

while (it.hasNext()){ //it是迭代器
	Object element=it.next();
	System.out.println(element);
}

遍历集合中元素也可以用for each语句

for(Object i:c){//c是Collection实例
	System.out.println(i);
}

2、Set

没有重复对像地存放对象的引用
如果set中加入了已有的引用,视为不加入

(1)Hashset

加快存储和查找的集合
每个对象的引用都有一个哈希码,通过哈希码存放,对象的hashCode()方法返回对象的哈希码
为了保证其正常工作,同一对象的哈希码相等,即:

if(a.equals(b)){
	a.hashCode()==b.hashCode() //为true
} 

(2)TreeSet

能对集合中对象排序

Set<Integer>set=new TreeSet<Integer>();
set.add(3);
set.add(2);
set.add(1);
for(int i:set){
	System.out.println(i);
}
//输出为123

java.util.Comparator<T>中的int compare(T x ,T y)提供TreeSet的具体排序方式,指定排序方法即override这一方式,如对String逆序排序

import java.util.*;
class newcomparator implements Comparator<String>{
	@Override
	public int compare(String o1, String o2) { //重写compare方法
		if(o1.compareTo(o2)>0)return -1;
		else if(o1.compareTo(o2)<0)return 1;
		else return 0;
	}
}
public class Test{
	public static void main(String args[]) {
		Set<String> set =new TreeSet<String>(new newcomparator()); //创建TreeSet,并且排序方式是定义的newcomparator()
		set.add("b");
		set.add("c");
		set.add("a");
		for(String i:set) {
			System.out.println(i);
		}
		//输出为cba
	}
}

3、List

线性方式存储元素,允许重复,主要实现类包括两种:

  1. ArrayList:快速检索元素,插入删除元素较慢
  2. LinkedList:快速插入删除元素,检索元素较慢

(1)get(int index)

返回index指定的索引位置的对象

(2)Collections.sort()

sort()方法用于对List中对象进行排序

  1. sort(List list):对list中对象自然排序
  2. sort(List list,Comparator comparator):指定排序方式

(3)把数组包装成List

Arrays.asList(Object[] o)方法能把一个java数组包装为一个List对象
所有对List的操作都会被作用到数组,因为数组固定长度,所以这里的List对象也是固定长度的add()remove()方法都会报错
Arrays.toString(Object[] o)把数组格式化为字符串

import java.util.Arrays;
import java.util.List;

public class Test{
	public static void main(String args[]) {
		String[] list= {"a","b","c"};
		List<String> x=Arrays.asList(list);
		x.set(0, "b");
		for(String i:list) {
			System.out.println(i);
		}
		//输出bbc
		System.out.println(Arrays.toString(list));
		//输出[b,b,c]
	}
}

4、Queue

末尾添加元素,头部删除元素

Queue<T> queue=new LinkedList<T>();

(1)加入元素

在末尾插入元素

  1. boolean add(E element):操作成功返回true,队列已满抛出异常
  2. boolean offer(E element):操作成功返回true,队列已满返回false

(2)删除元素

删除队头元素

  1. queue.remove():队列为空抛出异常
  2. queue.poll():队列为空返回null

(3)获取元素

获取队头元素

  1. queue.element():队列为空返回异常
  2. queue.peek():队列为空返回null

5、双向队列

Deque<T> queue=new ArrayDeque<T>();

(1)添加元素

  1. void addFirst(E element)
  2. void addLast(E element)
  3. boolean offerFirst(E element)
  4. boolean offerLast(E element)

(2)删除元素

  1. queue.removeFirst();
  2. queue.removeLast();
  3. queue.pollFirst();
  4. queue.pollLast();

(3)获取元素

  1. queue.getFirst();
  2. queue.getLast();
  3. queue.peakFirst();
  4. queue.peakLast();

6、Map

对象和值有映射
实现方法有:

  1. HashMap:存取性能好
  2. TreeMap:能排序

key值不能重复,如果重复,后加入的key的对象引用会覆盖掉前面的

(1)加入元素

put方法

map.put(Object key,Object value);

(2)检索对象

get方法

map.get(Object key);

(3)遍历映射

Set<Map.Entry<String,String>> set=map.entrySet();//set是一个以映射为对象的集合
for(Map.Entry entry:set)
System.out.println(entry.getKey()+":"+entry.getValue());

getKey()是返回键方法
getValue()是返回值方法

map.keySet()方法返回键集合
所以也可以通过遍历这个集合,通过map.get(Key)来遍历映射

(4)TreeMap

按key排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值