iterator

Java集合框架(List,Set,Map)

♀尐吖头ヾ 提交于 2020-03-30 12:08:51
单列集合基本框架 List接口特点: 1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。 2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。 3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。 4.List 接口提供了特殊的迭代器,称为 ListIterator ,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。 List接口常用实现类: ## vector集合 Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。 由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的 特点:1.线程同步的2.底层是数组实现的 特有方法 Enumeration<E> elements() ##ArrayList集合 1.底层是数组实现的 2.不是线程同步的 3.查询比较快 java.util.ArrayList`集合数据存储的结构是数组结构。方便元素随机访问。 ## LinkedList集合 1.底层是一个链表实现的 2.不同步。线程不安全 3

四,集合框架

无人久伴 提交于 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的兄弟类

Java集合框架面试题目

末鹿安然 提交于 2020-03-29 20:26:32
1.为什么Map接口不继承Collection 接口? Set是无序集合,并且不允许重复的元素 List是有序的集合,并且允许重复的元素 而Map是键值对 它被视为是键的set和值的set的组合 Map被设计为键值对的集合,所以不需要继承Collection 接口 2.HashMap和Hashtable之间的区别? 同步或线程安全 Null键和Null值 迭代值 默认容量大小 3.comparable 和 comparator的不同之处? comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法来将objects排序 comparator接口实际上是出自 java.util 包 它有一个compare(Object obj1, Object obj2)方法来将objects排序 4.如何对Object的list排序? 对objects数组进行排序,我们可以用Arrays.sort()方法 如果要对objects的集合进行排序,需要使用Collections.sort()方法 5. fail-fast 与 fail-safe 之间的区别? Fail fast快速地报告任何的failure。无论何时任何一个问题都会引发 fail fast系统fails 在Java Fail fast 迭代器中

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 =

Python3模糊点整理-函数式编程-高阶函数

我是研究僧i 提交于 2020-03-27 13:26:18
高阶函数 变量指向函数,有点像起别名 >>> f = abs >>> f(-10) 10   函数也是变量名 >>> abs = 10 >>> abs(-10) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not callable #实际代码绝对不能这么写,这里是为了说明函数名也是变量。要恢复abs函数,请重启Python交互环境。   接收函数做参数-->高阶函数 def add(x, y, f): return f(x) + f(y) #当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs,根据函数定义,我们可以推导计算过程为: x = -5 y = 6 f = abs f(x) + f(y) ==> abs(-5) + abs(6) ==> 11 return 11 有趣的高阶函数map:函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回     >>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>>

problem with updating a map by removing some keys and also some elements

狂风中的少年 提交于 2020-03-27 08:55:02
问题 I have a map. lets say map<int, vector<int> > mymap1 . I want to update mymap1 by deleting some “keys” and also removing unwanted “elements” from the vector part of the selected keys. The “key’ or the “element” going to be deleted is given from another vector, known as “mylabel”. Actually, What I need to remain in my map is the values whose label is equal to 1. (At the end, keys must have the elements whose label are 1 only.) I have implemented this (see code below), but got some compiler

java.util.ConcurrentModificationException

我的未来我决定 提交于 2020-03-25 04:37:36
[这篇博文,多亏cnblogs的管理员GG帮忙恢复,才得以重见天日,特在此拜谢!] 在使用set/map时,一个可爱的小bug :java.util.ConcurrentModificationException 【错误场景1】:set容器,边遍历,边add/remove元素 Set<String> set = new HashSet<String>(); for (int i = 0; i < 10000; i++) { set.add(Integer.toString(i)); } for (String str : set) { //或使用iterator来循环,JDK5.0以上,这样的遍历底层也都是iterator实现。 set.add("xxx"); //报错 // set.remove(str); //报错 } 【错误场景2】:map容器,边遍历,边remove元素 Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < 100; i++) { map.put(Integer.toString(i), Integer.toString(i)); } for (String str : map.keySet()) {//或使用iterator来循环 map.remove

java接口签名(Signature)实现方案

感情迁移 提交于 2020-03-24 11:00:01
预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 前言   在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。其中我认为最终要的还是数据是否被篡改。在此分享一下我的关于接口签名的实践方案。 如果这种方案不是很好理解,请参考 另一篇 更简单暴力的方案 java接口签名(Signature)实现方案续 。 签名流程 签名规则   1、线下分配 appid 和appsecret,针对不同的调用方分配不同的appid和appsecret   2、加入 timestamp (时间戳),10分钟内数据有效   3、加入流水号 nonce (防止重复提交), 至少为 10 位。 针对查询接口,流水号只用于日志落地,便于后期日志核查。 针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。    4、加入 signature ,所有数据的签名信息。   以上红色字段放在请求头中。 签名的生成    signature 字段生成规则如下。   数据部分    Path: 按照path中的顺序将所有value进行拼接    Query :按照key字典序排序,将所有key=value进行拼接    Form :按照key字典序排序,将所有key=value进行拼接    Body :     Json:

Remove from slice inplace in Golang

偶尔善良 提交于 2020-03-23 12:08:08
问题 I have the following test that is printing the original input slice (after the filtering) without the element that has been removed, but with an extra element at the end making the input slice of the same length, even if after the filtering it should be shorter. I've gone through this doc https://github.com/golang/go/wiki/SliceTricks#delete However I think I am missing some gotchas about Go, because it seems I am using slices with the wrong approach. how can I avoid to have an "output slice"?