Java 集合总结

1集合框架

在这里插入图片描述

2.Collection 接口

2.1 常用方法

boolean add(Object obj)  // 添加

boolean addAll(Collection coll)  // 将coll集合中的元素添加到当前的集合 

int size() // 获取有效元素的个数

void clear() // 清空集合

boolean isEmpty() // 判断是否是空集合

boolean contains(Object obj) //判断是否包含某个元素

boolean containsAll(Collection coll) // 判断当前集合是否包含集合coll (调用equals方法,拿两个集合的元素挨个比较)

boolean remove(Object obj) // 删除 (调用equals方法判断是否是
要删除的元素且只会删除找到的第一个元素)

boolean removeAll(Collection coll)// 当前集合中移除集合coll中的所有元素

boolean retainAll(Collection coll) //当前集合与集合coll的交集

boolean equals(Object obj) // 判断集合是否相等

Object[] toArray() //集合转换为数组

int hashCode() // 获取集合对象的哈希值

Iterator<E> iterator() // 返回迭代器对象

2.2 几点说明

  • Collection 接口是 List、Set 接口的父接口。则Collection接口里定义的方法可用于操作 Set、List 集合
  • Collection接口中并没有实现如下方法,而是在相应的实现类中实现的
  • contains( )、containsAll( )、remove( )、removeAll( )、retainAll( ) 都调用了equals( )方法。Collection接口的实现类中一般需要重写equals( )方法 ( 若不重写则调用object类中的equals( )方法:比较地址)
    在这里插入图片描述
Collection coll=new ArrayList();
coll.add("abc");//String类重写了equals()方法
System.out.println(coll.contains(new String("abc")));// true
		
Person person=new Person("Tom", 20);//Person(自定义) 类重写了equals()方法
coll.add(person);
System.out.println(coll.contains(new Person("Tom", 20)));//false
		
Man man=new Man("Bob", 22); // Man(自定义) 类未重写equals( )方法
coll.add(man);
System.out.println(coll.contains(new Man("Bob", 22)));	//false	
		

3. Iterator迭代器

Iterator迭代器

4. List接口

4.1 ArrayList与LinkedList

ArrayList与LinkedList

4.2 List 接口常用方法

  • List除了从Collection集合继承的方法外,还增加了一些额外的方法

void add(int index, Object ele) // 在index位置插入ele元素

boolean addAll(int index, Collection coll) // 从index位置开始将coll中的所有元素添加进来

Object get(int index) // 获取指定index位置的元素

int indexOf(Object obj) // 返回obj在集合中首次出现的位置

int lastIndexOf(Object obj) // 返回obj在当前集合中最后一次出现的位置

Object remove(int index) // 移除指定index位置的元素,并返回此元素

Object set(int index, Object ele)// 设置指定index位置的元素为ele

List subList(int fromIndex, int toIndex)// 返回从fromIndex到toIndex位置的子集合

5. Set 接口

  • set接口只继承了Collection接口的方法,没有提供额外的方法
  • 存储无序的、不可重复的数据

5.1 HashSet

  • 底层是 HashMap 实现( 可直接查看HashMap ,HashSet中的元素相当于HashMap中的key)

5.2 LinkedHashSet

  • 底层是 LinkedHashMap 实现( 可直接查看LinkedHashMap ,HashSet中的元素相当于LinkedHashMap中的key)

5.3 TreeSet

  • 底层是 TreeMap 实现( 可直接查看TreeMap ,TreeSet中的元素相当于TreeMap中的key)

6. Map接口

  • 存储具有映射关系“key-value”的集合
  • Map中的key不能重复,value可以重复(所以不管是HashMap、LinkedHashMap、TreeMap 其key不能重复,value可以重复)

6.1 常用方法

1.添加、删除、修改操作
Object put(Object key,Object value) //将指定key-value添加到(或修改)当前map对象中
void putAll(Map m) //将m中的所有key-value对存放到当前map中
Object remove(Object key) //移除指定key的key-value对,并返回value
void clear() //清空当前map中的所有数据

2.元素查询的操作:
Object get(Object key) //获取指定key对应的value
boolean containsKey(Object key) //是否包含指定的key
boolean containsValue(Object value) //是否包含指定的value
int size() //返回map中key-value对的个数
boolean isEmpty() //判断当前map是否为空
boolean equals(Object obj) //判断当前map和参数对象obj是否相等

3.元视图操作的方法:
Set keySet() //返回所有key构成的Set集合
Collection values() //返回所有value构成的Collection集合
Set entrySet() //返回所有key-value对构成的Set集合
//只有Collection的实现类才有迭代器,Map的实现类没有迭代器
		HashMap hashmap = new HashMap();
		hashmap.put("AA", 12);
		hashmap.put("BB", 34);
		hashmap.put("CC", 56);

		// 遍历所有的key集:keySet()
		Set set = hashmap.keySet();
		Iterator iterator = set.iterator();
		while (iterator.hasNext())
		{
			System.out.println(iterator.next());
		}
		System.out.println("*******************");
		
		// 遍历所有的value集:values()
		Collection values = hashmap.values();
		Iterator iterator1 = values.iterator();
		while (iterator1.hasNext())
		{
			System.out.println(iterator1.next());
		}
		System.out.println("*******************");
		
		// 遍历所有的key-value		
		// 方式一
		Set entrySet = hashmap.entrySet();
		Iterator iterator2 = entrySet.iterator();
		while (iterator2.hasNext())
		{
			Object obj = iterator2.next();
			Map.Entry entry = (Map.Entry) obj;
			System.out.println(entry.getKey() + "-->" + entry.getValue());

		}
		System.out.println("********************");
		
		// 方式二:
		Set keySet = hashmap.keySet();
		Iterator iterator3 = keySet.iterator();
		while (iterator3.hasNext())
		{
			Object key = iterator3.next();
			Object value = hashmap.get(key);
			System.out.println(key + "—" + value);
		}

6.2 HashMap

深入理解HashMap

6.3 LinkedHashMap

  • 存储无序、不可重复的元素。但是可以按照添加的顺序进行遍历。因为LinkedHashSet 虽然是根据元素的 hash 值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的
  • LinkedHashmap插入性能略低于 HashMap(因为要多维护两个保存地址的value),但在迭代访问 Map 里的全部元素时有很好的性能。
LinkedHashMap lhm=new LinkedHashMap();
lhm.put("abc", 20);
lhm.put("def", 20);
lhm.put("ghi", 20);
System.out.println(lhm);

//{abc=20, def=20, ghi=20}

6.4 TreeMap

  • TreeMap底层使用红黑树结构存储数据,查询速度较快
  • TreeMap 可以确保集合中的key处于排序状态
  • 向TreeMap中添加的数据,要求key是相同类的对象(因为涉及到排序,无法对不同对象进行排序),value可以不同
  • 向TreeMap添加的key对应的类需要实现Comparable 或Comparator 接口。
    排序时比较两个对象是否相同的唯一标准为:compareTo()返回0 或compare()返回0 。(则不用再重写hashcode()、equals() 方法)
    所以可以向TreeMap集合中key添加相同的元素,取决于实现比较器接口的方法(但是一般不这么做,因为违背了Map集合设计的初衷)
//compareTo()方法:保存name、No相同的元素
public class Person implements Comparable
{
	String name;
	int No;
	public Person(String name,int No)
	{
		this.No=No;
		this.name=name;
	}
	public String toString()
	{
		return "Person [name=" + name + ", No=" + No + "]";
	}
	
	@Override
	public int compareTo(Object o)
	{
		if(o instanceof Person)
		{
			Person p=(Person)o;
			int Nametemp=this.name.compareTo(p.name);
			if(Nametemp>0)
				return 1;
			else if (Nametemp<0)
				return -1;
			else {
				int Notemp=Integer.compare(this.No, p.No);
				return Notemp> 0 ? 1:-1;
			}
		}
		throw new RuntimeException("类型不一致");		
	}
}

TreeMap treeMap=new TreeMap();
treeMap.put(new Person("Tom", 12), 170);
treeMap.put(new Person("Tom", 12), "abd");
treeMap.put(new Person("Tom", 12), 170);
System.out.println(treeMap);

//{Person [name=Tom, No=12]=170, Person [name=Tom, No=12]=abd, Person [name=Tom, No=12]=170}

7.Collections工具类

  • Collections 是一个操作 Set、List 和 Map 等集合的工具类
reverse(List):反转 List 中元素的顺序

shuffle(List):对 List 集合元素进行随机排序

sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序

sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序

swap(List,intint):将指定 list 集合中的 i 处元素和 j 处元素进行交换

Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素

Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素

Object min(Collection)

Object min(Collection,Comparator)

int frequency(Collection,Object):返回指定集合中指定元素的出现次数

void copy(List dest,List src):将src中的内容复制到dest中

boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值