hashmap

四,集合框架

无人久伴 提交于 2020-03-30 10:59:11
集合框架 一,概念 1,基本 1,为了实现某一种特定功能而预先设计好的一系列具有继承或实现关系的类与接口, 2,操作时可以直接从高层直接开发而不用考虑底层 3,Java集合框架简称 jcf Java Collection Framework 2,最主要的collection 1,iterator和map与collection是关系型 2,List和set都是继承collection 3,collection 是接口 4,collections 是工具类,用来操作collection 二,List---中文名叫;列表(继承collection接口) 1,特点; 1,线性--以有序的方式存放数据,(放入元素的位置,数组就是线性)有序存放,有下标 2,掌握:ArrayList、LinkedList 1、在用法上两者的API完全相同; 2、调用以后的效果也是一样的。 3,区别:两个类在底层的实现上,ArrayList采用的是数组的方式进行存储; 1,LinkedList采用的是双向链表的方式。 这种区别造成了两个类适用场景的不同: LinkedList适用于做大量的往中间添加和删除数据。 2,ArrayList适用于做大量查询动作或往尾部添加和删除数据; 3,辨析:ArrayList\LinkedList\Vector Vector也是List分支,是ArrayList的兄弟类

ysoserial分析【二】7u21和URLDNS

落花浮王杯 提交于 2020-03-30 02:49:19
目录 7u21 gadget链分析 hashCode绕过 参考 URLDNS 7u21 7u21中利用了TemplatesImpl来执行命令,结合动态代理、AnnotationInvocationHandler、HashSet都成了gadget链。 先看一下调用栈,把ysoserial中的调用栈简化了一下 LinkedHashSet.readObject() LinkedHashSet.add() Proxy(Templates).equals() AnnotationInvocationHandler.invoke() AnnotationInvocationHandler.equalsImpl() Method.invoke() ... TemplatesImpl.getOutputProperties() TemplatesImpl.newTransformer() TemplatesImpl.getTransletInstance() TemplatesImpl.defineTransletClasses() 对_bytecodes属性的值(实例的字节码)进行实例化 RCE 其中关于 TemplatsImpl 类如何执行恶意代码的知识可以参考另一篇文章中对CommonsCollections2的分析,这里不再赘述。只要知道这里调用 TemplatesImpl

Java学习总结6-----Java集合类

試著忘記壹切 提交于 2020-03-29 21:39:11
今天在网上搜索了一下,发现一篇关于java集合的博文,里面整理得非常好, 特意copy过来和大家分享一下 本讲内容:集合 collection 讲集合collection之前,我们先分清三个概念: colection 集合,用来表示任何一种数据结构 Collection 集合接口,指的是 java.util.Collection接口,是 Set、List 和 Queue 接口的超类接口 Collections 集合工具类,指的是 java.util.Collections 类。 SCJP考试要求了解的接口有:Collection , Set , SortedSet , List , Map , SortedMap , Queue , NavigableSet , NavigableMap, 还有一个 Iterator 接口也是必须了解的。 SCJP考试要求了解的类有: HashMap , Hashtable ,TreeMap , LinkedHashMap , HashSet , LinkedHashSet ,TreeSet , ArrayList , Vector , LinkedList , PriorityQueuee , Collections , Arrays 下面给出一个集合之间的关系图: 上图中加粗线的ArrayList 和 HashMap 是我们重点讲解的对象

Java集合---HashSet的源码分析

瘦欲@ 提交于 2020-03-29 21:02:03
Java集合---HashSet的源码分析 一、 HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 二、 HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下: 1 public class HashSet<E> 2 extends AbstractSet<E> 3 implements Set<E>, Cloneable, java.io.Serializable 4{ 5 static final long serialVersionUID = -5024744406713321676L; 6 7 // 底层使用HashMap来保存HashSet中所有元素。 8 private transient HashMap<E,Object> map; 9 10 // 定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。 11 private static final Object

Java集合---HashSet的源码分析

自作多情 提交于 2020-03-29 20:59:45
一、 HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 二、 HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下: 1 public class HashSet<E> 2 extends AbstractSet<E> 3 implements Set<E>, Cloneable, java.io.Serializable 4 4{ 5 static final long serialVersionUID = -5024744406713321676L; 6 7 // 底层使用HashMap来保存HashSet中所有元素。 8 private transient HashMap<E,Object> map; 9 10 // 定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。 11 private static final Object PRESENT = new Object()

java集合对比

南笙酒味 提交于 2020-03-29 20:59:14
list与Set、Map 区别及适用场景 1、List,Set都是继承自Collection接口,Map则不是 2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。) 3.Set和List对比: Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。 4.Map适合储存键值对的数据 5.线程安全集合类与非线程安全集合类 LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的; HashMap是非线程安全的,HashTable是线程安全的; StringBuilder是非线程安全的,StringBuffer是线程安全的。 下面是具体的使用介绍: ArrayList与LinkedList的区别和适用场景 Arraylist: 优点

java集合 之 Map集合

前提是你 提交于 2020-03-29 20:53:24
Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key;另一组用于保存Map中的value,形成key-value的存储形式 。 Map集合中包含的一些方法: void clear(): 删除Map集合中的所有key-value对。 boolean containsKey(object key): 查询Map集合中是否包含指定的key,如果包含,返回true。 boolean containsValue(Object value): 查询Map集合中是否包含指定的value,如果包含返回true。 set entrySet(): 返回Map中包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry(Entry是Map的内部类)对象。 Object get(Object key): 返回指定的key所对应的value;如果此Map中不包括该key,则返回null。 boolean isEmpty(): 查询该Map是否为空,如果为空则返回null。 set keyset(): 返回该map中所有key所组成的集合。 Object put(Object key,Object value): 添加一个key-value对,如果当前Map中已有一个与该key相等的key-value对,则新的key-value会覆盖原来的key-value对。

JAVA基础——集合类汇总

醉酒当歌 提交于 2020-03-29 20:24:48
一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。 Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。 3.remove()删除当前元素。 三、几种重要的接口和类简介 1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时

java遍历hashMap、hashSet、Hashtable

馋奶兔 提交于 2020-03-28 16:48:55
一.遍历HashMap Map<Integer, String> map = new HashMap<Integer, String>(); 方法一:效率高 for(Entry<Integer, String> entry:map.entrySet()){   System.out.println(entry.getKey()+"="+entry.getValue()); } 方法二: for (Integer key : map.keySet()) {   String value = map.get(key); (这样取value会导致效率低,不建议。)   System.out.println(value); } 还可以单独遍历value for (Integer value : map.values()) {   System.out.println("Value = " + value); } 方法三:(好处:可以在遍历时调用iterator.remove()来删除entries) Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) {   Map.Entry<Integer, Integer> entry =

7.7 HashSet和HashMap的性能选项

馋奶兔 提交于 2020-03-28 11:28:36
  对于HashSet及其子类而言,它们采用hash算法来决定集合中元素的存储位置,并通过hash算法来控制集合的大小;对于HashMap、Hashtable及其子类而言,它们采用hash算法来决定Map中的key的存储,并通过hash算法来控制集合的大小。   hash表里可以存储元素的位置被称为"桶(bucket)",在通常情况下,单个"桶"里存储一个元素,此时具有最好的性能:hash算法可以根据hashCode值计算出"桶"的存储位置,接着从"桶"里取出元素。但hash表的状态是open的:在发生"hash冲突"的情况下,单个桶可以存储多个元素,这些元素以链表形式存储,必须按顺序搜索。 下图是hash表保存个元素,且发生"hash冲突"的示意图: 因为HashSet和HashMap、Hashtable都使用hash算法来决定其元素(HashMap只考虑key)的存储,因此HashSet、HashMap的hash表包含以下属性: ★容量(Capacity):hash表中桶的数量 ★初始化容量(initial capacity):创建hash表时桶的数量。HashMap和HashSet都允许在构造器中指定初始容量。 ★尺寸(size):当前hash表记录的数量 ★负载因子(load factor):负载因子等同于"size/capacity"。负载因子为0表示空的hash表,0