java 集合相关知识总结

相关链接

参考:
https://www.cnblogs.com/iwenwen/p/11052689.html

LIST集合

java list集合是可重复,有序,底层为数组和链表的数据结构的集合,内部主要包含

  1. ArrayList
    底层为数组,可以为空,查询速度快,删除慢(数组的特点决定),线程不安全
  2. LinkedList
    底层为链表,可以为空,删除,添加速度快,查询速度慢(链表特点),线程不安全
  3. vector
    用sys 关键字修饰,所以线程安全但是速度,效率低,用的不多,线程安全

为啥线程不全?

  1. CopyOnWriteArrayList

为啥效率高?

list 如何删除元素?

使用遍历器的方式

Iterator<String> iterator = list.iterator();
		
		System.out.println(list.size());
		while(iterator.hasNext()) {
			String value=iterator.next();
			System.out.println(value);
			if(value=="d") {
				iterator.remove();
			}
		}

map

java map 是数据结构是 K-V,,

  1. HashMap
    HashMap可以存储一个Key为null,多个value为null的元素,线程不安全,jdk6实现方式是链表加数组的方式,jdk8实现的方式实现红黑树加链表加红黑树

数据结构和如何存储数据

HashMap

JDK版本 实现方式 节点数>=8 节点数<=6
1.8以前 数组+单向链表 数组+单向链表 数组+单向链表
1.8以后 数组+单向链表+红黑树 数组+红黑树 数组+单向链表

HashMap 存储的一个节点称之为entry,里面存放 hashmap的 key和value的信息

基本概念

红黑树:

相关规则可以参考

https://www.cnblogs.com/woniu4/p/8086707.html

红黑树的作用可以将降低数据的层级,加快数据的查询效率

加载因子:默认为0.75

初始容量:16

存储位置的计算方式:

https://blog.csdn.net/michaelrainy/article/details/104754540?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242

hashmap 的遍历方式?

// 第一种,普遍使用 keyset 方式
		
		for(String key:map.keySet()) {
			System.out.println(key);
			System.out.println(map.get(key));
		}
		
		
		// 使用遍历器的方式
		Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
		while(iter.hasNext()) {
			Map.Entry<String,String> entry = (Map.Entry) iter.next();
			Object key = entry.getKey();
			Object value =  entry.getValue();
			System.out.println(key.toString());
			System.out.println(value.toString());
		}
		
		
		// 直接使用 entry的方式
		
		for(Map.Entry<String, String> entry :map.entrySet()) {
			System.out.println(entry.getKey());
			System.out.println(entry.getValue());
		}
		

具体实现的过程参考:
2. HashTable
Hashtable K和V都不能为空,线程安全
3. CurrentHashMap
HashMap的封装类型,线程安全。
如何实现的?

  1. TreeMap

map排序实现过程

参考:
https://www.cnblogs.com/lovebread/archive/2009/11/23/1609121.html

Map 的排序?

按key 来排序

/**     

 * @{#} MapTest2.java Create on 2020年8月27日 下午3:49:04     

 *     

 * Copyright (c) 2013 by Logan.     

 */     

package test.map;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**     

* @author jiangcl    

* @version 1.0     
* @desc

*/

public class MapTest2 {
	
	public static void main(String[] args) {
		
		Map map  = new HashMap();
		map.put("apple", 200);
		map.put("pear",4534);
		map.put("wantermelan",4111);
		map.put("orange",1010);
		
		// 按照 key 来排序
		
		/*
		 * 首先hashmap 存储节点是entry 存储key和value的值
		 * 我们可以获取存储hashmap 存储key的集合
		 * 然后通过sort 方法进行排序
		 * 
		 * **/
		Set set = map.keySet();
		
		Object[] obArr = set.toArray();
		
		Arrays.sort(obArr);
		
		for(int i = 0 ;i<obArr.length;i++) {
			System.out.println(obArr[i].toString());
		}
		System.out.println("=====================");
		Iterator  it = set.iterator();
		
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
	}

}

按照hashmap 的value 来排序

/**     

 * @{#} MapTest3.java Create on 2020年8月27日 下午4:13:15     

 *     

 * Copyright (c) 2013 by Logan.     

 */

package test.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * 
 * @author jiangcl
 * 
 * @version 1.0
 * @desc
 * 
 */

public class MapTest3 {

	public static void main(String[] args) {

		Map map = new HashMap();
		map.put("apple", 200);
		map.put("pear", 4534);
		map.put("wantermelan", 4111);
		map.put("orange", 1010);

		// 按照 value 来排序

		/*
		 * 思路还是获取hashmap的节点信息 entry,然后将entry 中的value的值取出放到
		 * 重写compare 的方法进行排序
		 * **/
		
		List<Map.Entry<String, Integer>> list = 
				new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
		
		list.sort(new Comparator<Map.Entry<String, Integer>>(){
			@Override
			public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
				// 具体排序的实现
				
				return arg0.getValue().compareTo(arg1.getValue());
			}
		});
		
		// 另一种方法
		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
	           @Override
	           public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
	               return o2.getValue().compareTo(o1.getValue());
	           }
	       });
		
		for(int i = 0;i<list.size();i++) {
			System.out.println(list.get(i).getValue());
		}
	}

}

set集合

set 集合是不为空,无序集合

参考资料:https://baijiahao.baidu.com/s?id=1662461513424816401&wfr=spider&for=pc

  1. HashSet

HashSet 底层实现是HashMap,并且HashSet中add方法保存的内容为hashMap里面的key,hashMap的key 是不能重复的所以hashset也元素也不能重复

  1. TreeSet
    底层为treeMap

  2. LinkedHashSet
    底层实现的机制为linkedHashMap

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值