初识java集合——其他集合

* 弱散列映射表(WeakHashMap)
* 如果有一个值,对应的键已经不再使用了,将会出现什么情况呢
* 假定对某个键的而最后一次引用已经消亡,不再有任何途径引用这个值对象了,但是由于程序中任何
* 部分没有再引用这个键,所以这个键/值无法从Map中删除。
* 遗憾的是,垃圾回收器跟踪活动的对象,只要Map对象时活动的,其中的所有桶也都是活动的,它们不能被回收。
* 当对键的唯一引用来自散列表条目时,这一数据结构将于垃圾回收器协同工作一起删除键/值对
*
* 下面是对于【弱散列映射表】的机制介绍
* WeakHashMap使用若引用(weak references) 保存键。弱引用对象将弱引用保存到另外一个对象中,在这里
* 就是<散列表键>。对该类型,垃圾回收器的方式是这样的:一般,如果垃圾回收器发现某个特定的对象已经没有人引用了
* 就将其回收。如果某个对象只能由弱引用来引用的话,垃圾回收仍然回收他,但会将引用这个对象的弱引用放入到队列中。
* WeakHashMap将周期性的检查队列,以便找到新添加的弱引用。一个弱引用进入队列意味着这个键不再被他人使用,
* 并且已经被收集了起来,于是WeakHashMap将删除对应的条目
*
* 【链接散列集和链接映射表】
* 在JDK1.4引入了2个类,LinkedHashSet 和 LinkedHashMap,用来记住插入元素的顺序
*
* 链接散列映射表将用访问顺序,而不是插入顺序,对映射表条目进行迭代。
* 每次调用get或者put,受影响的条目将从当前的位置删除,然后被放置到条目链表的尾部(散列表的桶是不会受到影响的)
* 受此启发,可以利用访问顺序来实现高速缓存的“最近 最少使用”原则
* 比如,希望将访问频率高的放在内存中,而低的放在数据库中。当在表中找不到元素项且表已经饱和
* 可以利用迭代器,将枚举出的前几个元素删除(因为这几个是最少使用的)
*
* 【枚举集和映射集】
* EnumSet是一个枚举类型元素集的高效实现。因为枚举类型是有限个实例,因此内部使用了【位序列】来实现。
* 如果对应的值在集中,则相应的位置被置为1.
* 该类没有公共的构造器,只能使用工厂方法来构造这个集
*
* EnumMap是一个键类型为枚举类的映射表,它可以直接且高效的用一个值数组来实现
* 在使用时,需要再构造器中制定键的类型
*
* 【标识散列映射表】IdentityHashMap
* 在java1.4中引入了一个特殊目的的类,在这个类中,键不在是用hashcode来计算的,而是使用System.identityHashCode
* 方法计算的。这是Object.hashcode方法根据对象的内存地址来计算散列码时采用的方式
* 而且在两个对象进行比较的时候,使用的是==,而不是equals
* 也就是说,不同键对象,即使内容相同,也被视为是不同的对象。
* 在实现对象遍历算法(如对象序列化)时,这个类非常有用,可以用来跟踪每个对象的遍历情况。

 1 public class OtherCollection {
 2
 3     public static void main(String[] args) {
 4 //        Map<K, V> cache = new LinkedHashMap<>(128, 0.75f, true){
 5 //            protected boolean remove EldestEntry(Map.Entry<K, V> eldest)
 6 //            {
 7 //                return size()>100;
 8 //            }
 9 //        };
10 //
11         EnumSet<weekday> always = EnumSet.allOf(weekday.class);
12         EnumSet<weekday> never = EnumSet.noneOf(weekday.class);
13         EnumSet<weekday> workday = EnumSet.range(weekday.MON, weekday.FRI);
14         EnumSet<weekday> mwf = EnumSet.of(weekday.MON, weekday.WED, weekday.FRI);
15         //可以使用Set常用的接口来修改EnumSet
16
17         //EnumMap
18         EnumMap<weekday, Employee> personInChange = new EnumMap<>(weekday.class);
19     }
20
21
22 }
23
24 enum weekday {MON, TUE, WED, THUR, FRI, SAT, SUN};
时间: 2024-11-07 13:03:15

初识java集合——其他集合的相关文章

JAVA基础之集合框架

集合框架(collections framework) 首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能).Java中的集合框架定义了一套规范,用来表示.操作集合,使具体操作与实现细节解耦. 其实说白了,可以把一个集合看成一个微型数据库,操作不外乎"增删改查"四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了. 设计理念 主要理念用一句话概括就是:提供一套"小而美"的API.API需要对

java中的集合框架

由于数组具有属性单一,长度不可改变的缺点,于是在程序中我们使用集合来代替它. 集合中不可放入基本数据类型,基本数据类型都是通过自动拆包和自动装箱功能才能放入和取出集合. 分类:Collection接口和Map接口 Collection:存放单一值元素,又可分为list接口类型和set接口类型 list接口类型:存放元素是有序的可重复的,可通过循环来取出其中的元素,实现类ArrayList() set接口类型:hash值排列,存放元素是无序不可重复的,通过指针取出其中元素,实现类HashSet()

老白的JAVA课程17 集合

集合 数组的缺点:长度限制 添加的类型有限制 集合自动变长 随意添加 但是数组的效率高,在游戏里用的比较多 SuperArry是一套的集合框架 两大类 接口 1 Collection  单一值的元素  1.1 list 有序的 放进去的顺序和里面的顺序是一样的 (不是传统的里面有没有顺序的意思)    可重复的    实现类 ArryList 1.2 set  无序的 里面和放进去的不是一样的    只能是不可重复的 2 Map  键值对 键 值  map的键是不能重复的 老白的JAVA课程17

java学习日记 集合框架

集合框架 有两大接口  一个是 Collection (类集 )与Map (映射): collection 下有两大接口  一个是List (列表) 另一个是Set(集合) List (列表):ArrayList 基于数组实现的动态列表    动态数组 : LinkedList 基于链表实现的列表      双向循环链表 Vector 向量   ------>stack栈           与线程相关: Set (集合) :TreeSet       通过树实现的集合  有序集合 HashSe

java之容器(集合)

知识点: 容器的作用和概览 数组总结回顾 作用 是一种容器,可以在其中放置对象或基本类型数据.从而,实现使用数组管理一组对象. 优势 是一种简单的线性序列,可以快速的访问数组元素,效率高.如果从效率和类型检查的角度讲,数组是最好的. 劣势 不灵活:容量事先定义好,不能随着需求的变化而扩容. 比如:我们在一个用户管理系统中,要把今天注册的所有用户取出来,那么这个用户有多少个?我们在写程序时是无法确定的. 因此,数组远远不能满足我们的需求. 我们需要一种灵活的,容量可以随时扩充的容器来装载我们的对象

Java集合 Json集合之间的转换

1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSONArray.fromObject()中,得到一个JSONArray集合,再直接使用JSONArray的toString()方法,便可得到json集合 示例代码: @Test public void testCreateJsonArray() { //Java集合 List<Employee> l

Java学习笔记----------集合Set

Java集合-----Set集合:就像一种容器,可以把多个对象放进该容器中.Java集合分为:Set.List.Map三种体系. Set:无序的,不可重复的: List:有序的,可重复的: Map:代表有映射关系的集合,Map保存的每一项数据都是key-value对.注意:Java 5后添加了Queue体系,代表一种队列集合实现. 集合和数组对比:1.数组一旦初始化,长度不可变:2.数组无法保存具有映射关系的数据,例如成绩表:语文---79:3.数组的元素可以是基本类型的值,也可以是对象,而集合

学java教程之集合框架

学编程吧学编程学IT教程之java教程集合框架发布了,欢迎通过xuebiancheng8.com来访问 java中的集合框架故名思议就是针对集合的框架.那什么是集合呢,前面已经学习过数组,没错,数组就是一组数据的集合,换句话说数组也是一种特殊的集合框架,可以完成集合的功能.那数组在使用的时候有没有不方便的地方呢,比方说数组有可能有满的时候,满了怎么办,我们是不是得自己写程序来更改数组的大小呢,而且还要把原来的数组赋值到新的数组的原来位置上,这样很明显数组用起来不是特别方便,很多功能得让我们自己去

菜鸟日记之 java中的集合框架

java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterator接口所以具有了iterator()方法 ,该方法返回一个Iterator<T>,这个接口具有 HasNext (),next(),remove()3个方法可以在实现类里完成实现. hasNext():判断是否有下一个元素 cusor是当前的操作下标 next():读取下一个元素 remove(

java中的集合操作类(未完待续)

申明: 实习生的肤浅理解,如发现有错误之处,还望大牛们多多指点 废话 其实我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList<XXXXX>(); 但是我仅仅只是了解,list这个类是一个可变长用来存储的对象实例的类,我甚至觉得这个List对象可以理解成数组,但是却又与java中咱们正常理解的数组很多的不同,比如说,他的长度可以随着需要自动增长,比如说,实例化一个List类就和咱们声明数组的时候是不一样的! 今天的实习生活