import org.apache.commons.collections.CollectionUtils; import java.util.ArrayList; import java.util.Collections...; import java.util.List; public class CopyTest { public static void main(String[] args) {
问题描述: 由于某种原因,我必须需要将某个集合的键(Key)复制一份副本。并移动到目标库 拿到这个问题,脑海里一共有两种方式 将所有的此集合中的所有的值从redis里面读取出来,然后再存进去。...使用集合的思想进行取差集或并集。如果二者有一个且仅有一个为空那么他们返回的结果为有值的集合 方案一 将所有的此集合中的所有的值从redis里面读取出来,然后再存到目标库中。 思路清晰,不再过多赘述。...创建集合 1,2,3 ? 取给定集合的并集存储在目标集合中 ? 取给差集合的并集存储在目标集合中 ?...destination key [key ...] summary: Subtract multiple sets and store the resulting set in a key 减去多个集合并将得到的集合存储在一个键中...since: 1.0.0 group: set 总结 采用先取后存以及使用集合的特性对于集合实现复制操作。
关于Java中的深复制、浅复制,网上也有很多资料解释,这里整理出来加入一些自己的想法。 浅复制 什么是浅复制 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。...代码 深复制,对Classroom中的clone()进行如下重写。此时引用对象Student必须重写方法clone();这是因为基础类中的clone方法是protect的。...结论 深复制是完全复制一个对象,类似新建一个对象!浅复制只是复制引用类型的内存地址。 浅复制、深复制的主要差别在引用类型的复制上。 基本数据类型在深复制、浅复制中直接复制了值。...扩展 序列化也可以实现深复制,是通过IO流实现的,开销比较大。有大神写了个类直接继承就可以实现深复制。这种方法可以提高代码的复用。...参考: Java中的深拷贝(深复制)和浅拷贝(浅复制) Java的一个高性能快速深拷贝方法。Cloneable? Java中的深拷贝和浅拷贝介绍
,因此ArrayList集合不适合删除和插入,而适合查找和遍历操作; 5、ArrayList集合长度自动增长原理 ArrayList集合不需要在定义时指定数组的长度,当所要存储的元素超过ArrayList...长度的时候,系统会自动创建一个更大长度的数组,将之前的元素复制进去,然后继续进行添加操作; 四、LinkedList 1、简介 List 接口的链接列表实现(底层是链表结构); 此实现不是同步的(意思是多线程...(linkedList); System.out.println("====================="); 2、将指定的元素插入到集合的末尾: //2、将指定的元素插入到集合的末尾...("====================="); 5、获取集合的最后一个元素: //5、获取集合的最后一个元素 System.out.println("获取集合的最后一个元素为...: //7、移除并返回集合的最后一个元素 System.out.println("所移除的集合的最后一个元素为"+linkedList.removeLast());
java集合概述 Java 集合可分为 Collection 和 Map 两种体系 Collection接口:单列数据,定义了存取一组对象的方法的集合 List:元素有序(指的是存储时,与存放顺序保持一致...正常情况下,大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。...集合中,则添加操作失败。...HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。...(Collection,Object):返回指定集合中指定元素的出现次数 void copy(List dest,List src):将src中的内容复制到dest中 boolean replaceAll
1、Set接口简介 一个不包含重复元素的集合; 此接口没有索引,没有带索引的方法; set接口跟Collection方法基本一致,主要研究其实现类; 2、HashSet 简介 此类实现set接口,由哈希表...(实际上是一个HashMap实例)支持; 它不保证set的迭代顺序,特别是不保证该顺序恒久不变; 允许使用null元素; 此实现不是同步的(多线程,速度快); 特点 一个不包含重复元素的集合; 此接口没有索引...,没有带索引的方法; 无序的集合,存取元素的顺序可能不一致; 底层是一个HashMap结构(查询速度快); //多态方式实现HashSet Set set...基本思路: 当set调用add方法的时候,会将当前所要存储的元素的哈希值在集合中查找,若未查找到,则存储集合,若查找到则会调用equals方法,与集合中已经存在的相同哈希值的元素进行比较,若返回true...则不再将所要存储的元素存储到集合中,若返回false则将所要存储的元素存储到集合中。
一、Java中的集合 集合接口 集合框架定义了一些接口。...---- 集合实现类(集合类) Java提供了一套实现了Collection接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现。...在前面的教程中已经讨论通过java.util包中定义的类,如下所示: 类名称 类描述 Vector 该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度...Hashtable Hashtable 是 Dictionary(字典) 类的子类,位于 java.util 包中。...BitSet中数组大小会随需要增加。 迭代器 通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。
容量可以变,并且不用开发者操心 1.2 集合架构 Java中集合的【总接口】Collection。...); 删除集合中的指定元素 boolean removeAll(Collection<?...obj); 判断指定元素在当前集合中是否存在 boolean containsAll(Collection c); 判断集合c是不是当前集合的子集合 以下是代码的实现: 注意导包,之前的部分代码也需要导包 就是这个: import java.util.ArrayList; import java.util.Collection...在某一个指定位置添加元素,会导致从指定位置开始,之后的元素整体向后移动,涉及 移动复制操作,浪费时间。 删除慢: 1.
①Properties集合是唯一一个跟IO结合的集合; ②可以使用Properties的store方法,把集合的临时数据,持久化地写入到硬盘中; ③可以使用Properties的load方法,把硬盘中保存的文件...,添加数据; ②创建字节输出流/字符输出流对象,构造方法中绑定输出的目的地; ③使用Properties中的store方法,可以将内存中的集合的临时数据写入到硬盘中存储; ④释放资源; 4、代码演示 代码...: package study.io; import java.io.FileWriter; import java.io.IOException; import java.util.Properties...store方法,可以将内存中的集合的临时数据写入到硬盘中存储; properties.store(fileWriter,""); //④释放资源; fileWriter.close...; ③遍历Properties集合; 4、注意 ①存储键值对的文件中,键与值默认的连接符号可以使用=,空格(或其他符号); ②存储键值对的文件中,可以使用#进行注释,被注释的键值对不对再被读取; ③存储键值对的文件中
首先需要明确的是Java中数组的复制是引用传递,而不是值传递。 两者有什么不同呢,首先来看一个实例。...那要进行复制怎么办呢?...有3中方法进行数组的复制 1. for循环进行遍历 public class ArrayDemo { public static void main(String[] args) { int[]...array3 = new int[array1.length]; System.arraycopy(array1, 0, array3, 0, array1.length); 具体每个参数的意思,参考Java...复制的方法同样有3中,下面只给出其中一种的实例: int[][] matrix2 = new int[row][column]; for (int i = 0; i < row; i++) {
集合中的对象排序需求还是比較常见的。当然我们能够重写equals方法,循环比較;同一时候Java为我们提供了更易使用的APIs。...当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparator或Comparable。以简单的方式实现对象排序或自己定义排序。...import java.util.Arrays;public class ComparableUser implements Comparable { private String id; private...; import java.util.Comparator; public class UserComparator implements Comparator { public int compare...假设一个类实现了Comparable接口,则表明这个类的对象之间是能够相互比較的,这个类对象组成的集合就能够直接使用sort方法排序。 而Comparator能够看成一种算法的实现。
集合概述 集合到底是什么呢? 集合:集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的。集合的长度是可变的。...集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map本文主要讲Collection集合,后续再补充Map集合。...集合本身是一个工具,它存放在java.util包中。在Collection接口定义着单列集合框架中最最共性的内容。...public boolean remove(E e): 把给定的对象在当前集合中删除。 public boolean contains(E e): 判断当前集合中是否包含给定的对象。...public Object[] toArray(): 把集合中的元素,存储到数组中。
2、集合的框架 二、Collection集合的常用方法 1、将给定的对象添加到指定的集合中 方法: boolean add(E e) 说明: 将给定的对象添加到指定的集合中,一般返回的都是true,不用理会...; 使用: // 1、将给定的对象添加到指定的集合中 Collection collection = new ArrayList(); collection.add...小兰"); collection.add("小李"); System.out.println(collection);//[小明,小兰,小李] 2、将给定的对象从指定的集合中删除...boolean remove(Object o) 说明: 若存在指定的元素,则删除成功,返回true;若不存在指定的元素,则删除失败,返回false; 使用: // 2、将给定的对象从指定的集合中删除...);//[] 4、判断给定的对象是否在指定的集合中 方法: boolean contains(Object o) 使用: // 4、判断给定的对象是否在指定的集合中 System.out.println
当向HashSet中添加可变对象时,必须十分小心。如果修改HashSet集合中的对象,有可能导致该对象与集合中的其他对象相等,从而导致HashSet无法准确访问该对象。...:"+nums.first());//集合中的第一个元素:-4 System.out.println("集合中的最后一个元素:"+nums.last());//集合中的最后一个元素:15...EnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合; EnumSet copyOf(EnumSet s):复制原集合; EnumSet noneOf(Class...EnumSet es5 = EnumSet.complementOf(es4); System.out.println(es5);//[Spring] } } 复制集合...; c.clear(); c.add(SeasonEnum.Spring); c.add(SeasonEnum.Summer); //复制集合中的元素来创建
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象。...但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[] 数组类型,指向在堆里面地址连续的实际数组对象。...在内存中,数组存储在连续的区域内部,因为数组中每个元素的类型相同,则占用的内存大小也一致,所以在访问数组中的元素时可以直接根据数组在内存中的起始位置以及下标来计算元素的位置,因此数组的访问速度很高。...数组和集合的区别: 1》数组初始化之后大小固定,无法再改变,集合大小可以改变。...数组和集合之间进行转化: toArray():将集合转化为数组。 Arrays.asList():将数组转化为集合. 集合的体系结构 List、Set、Map是这个集合体系中最主要的三个接口。
1.Collection接口 Collection是最基本的集合接口,声明了适用于JAVA(List和Set)集合的通用方法 collection接口的方法:add()、clear()、iterator...3.List(列表) List的特征是其元素以线性方式存储,集合中可以存放重复对象。...List接口主要实现类包括: AarrayList():数据结构:长度可变(创建新数组+复制数组)数组,查询快,增删慢,不同步。 LinkedList():链接列表:增删快,查询慢,不同步。...Map没有继承于Collection接口,从Map集合中检索元素时候,只要给出键对象,就会返回对应的值对象。...remove(键):删除元素,一次删一对 获取map集合中的所有的数据: 1.keySet():获取map中所有的键,方法返回set集合,因为map中的键是惟一的。
如果把Map集合里的所有value放在一起来看,它们又类似于一个List,元素可以重复,每个元素可以根据索引来找,只是Map中的索引不再是整数值,而是以另一个对象作为索引。...(Object value):查询Map中是否包含一个或多个value; Set entrySet():返回map中包含的键值对所组成的Set集合,每个集合都是Map.Entry对象。...Object put(Object key,Object value):添加一个键值对,如果集合中的key重复,则覆盖原来的键值对; void putAll(Map m):将Map中的键值对复制到本Map...不能修改集合中的key,否则程序再也无法准确访问到Map中被修改过的key。...",70); map.put("java",71); System.out.println(map);//{java=71, 语文=90, 语文=89} 前面是两个对象虽然通过
(iterator.hasNext()) { String next = iterator.next(); } } } 问题疑问 为什么要叫写时复制集合...基本结构 参数介绍 public class CopyOnWriteArrayList implements List, RandomAccess, Cloneable, java.io.Serializable...3 总结 Q&A Q: 为什么要叫写时复制集合? A: 因为在 add、remove 操作时会复制出来一个新数组。 Q: CopyOnWriteArrayList 实现原理是什么?...A: CopyOnWriteArrayList 在读多写少的场景下可以提高效率,而 ArrayList 只是普通数组集合,并不适用于并发场景,而如果对 ArrayList 加锁,则会影响一部分性能。...因为刚写入的数据,是写到的复制的数组中,此时并不能立即查询到。如果要保证实时性可以尝试使用 Collections.synchronizedList 或者加锁等方式。
1.2 Java中的实现 上一篇,阐述了队列的实现结构,通过图片的形式让大家有了更进一步的了解。 接下来,我,我们来看看队列在Java具体是如何成仙了,来看下Queue的代码!!!...在Java中,ArrayDeque、LinkedList、PriorityQueue等类实现了Queue接口,模拟了队列的数据结构。...: PriorityQueue成员变量和构造方法: public class PriorityQueue extends AbstractQueue implements java.io.Serializable...newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); //数组复制...所以,我们在代码中可以看到PriorityQueue最底层数据结构就是数组。
1.2 ArrayDeque源码(基于JDK1.7.0_45) 值得一提的是,Java中有一个类叫做Stack,该类实现了栈结构。...但是,Java已经不提倡Stack来实现栈结构,而是建议使用ArrayDeque类; 来自Stack类描述: A more complete and consistent set of LIFO stack..., deque too big"); Object[] a = new Object[newCapacity]; //连续调用2次的目的,是为了把原数组中所有的元素全部复制到新数组中...可设置队列大小的构造函数: public ArrayDeque(int numElements) { allocateElements(numElements); } //带集合的构造函数...集合方法,又有Deque集合方法。