Iterator 接口源码中的方法: java.lang.Iterable 接口被 java.util.Collection 接口继承,java.util.Collection 接口的 iterator() 方法返回一个 Iterator 对象 next() 方法获得集合中的下一个元素 hasNext() 检查集合中是否还有元素 remove() 方法将迭代器新返回的元素删除
为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)。
Vector:就比Arraylist多了个同步化机制(线程安全)。 Stack:栈,也是线程安全的,继承于Vector。 Hashtable:就比Hashmap多了个线程安全。 ConcurrentHashMap:是一种高效但是线程安全的集合。
(1)offer()和add()区别: 增加新项时,如果队列满了,add会抛出异常,offer返回false。 (2)poll()和remove()区别: poll()和remove()都是从队列中删除第一个元素,remove抛出异常,poll返回null。 (3)peek()和element()区别: peek()和element()用于查询队列头部元素,为空时element抛出异常,peek返
String[] arr = {"zs","ls","ww"}; List<String> list = Arrays.asList(arr); System.out.println(list); ArrayList<String> list1 = new ArrayList<String>(); list1.add("张三"); list1.add("李四"); list1.add("王五"
ArrayList是动态数组的数据结构实现,查找和遍历的效率较高; LinkedList 是双向链表的数据结构,增加和删除的效率较高;
HashSet实际上是一个HashMap实例,数据存储结构都是数组+链表。 HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value都是一个统一的对象PRESENT。 private static final Object PRESENT = new Object(); HashSet中add方法调用的是底层HashMap中的put方法,pu
(1)HashSet HashSet是set接口的实现类,set下面最主要的实现类就是HashSet(也就是用的最多的),此外还有LinkedHashSet和TreeSet。 HashSet是无序的、不可重复的。通过对象的hashCode和equals方法保证对象的唯一性。 HashSet内部的存储结构是哈希表,是线程不安全的。 (2)TreeSet TreeSet对元素进行排序的方式: 元素自身
HashMap是线程不安全的,HashTable是线程安全的; HashMap中允许键和值为null,HashTable不允许; HashMap的默认容器是16,为2倍扩容,HashTable默认是11,为2倍+1扩容;
(1)List简介 实际上有两种List:一种是基本的ArrayList,其优点在于随机访问元素,另一种是LinkedList,它并不是为快速随机访问设计的,而是快速的插入或删除。 ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。 LinkedList :对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢
(1)Collection是最基本的集合接口,Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。 (2)Collections是一个包装类,它包含各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等)。 此类不能实例化,就像一个工具类,服务于Collection框架。
(1)Collection ① set HashSet、TreeSet ② list ArrayList、LinkedList、Vector (2)Map HashMap、HashTable、TreeMap
byte的范围是-128~127。 字节长度为8位,最左边的是符号位,而127的二进制为01111111,所以执行+1操作时,01111111变为10000000。 大家知道,计算机中存储负数,存的是补码的兴衰。左边第一位为符号位。 那么负数的补码转换成十进制如下: 一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。 已知一个负数的补码,将其转换为十进制数
new clone() 通过反射机制创建 //用 Class.forName方法获取类,在调用类的newinstance()方法 Class<?> cls = Class.forName("com.dao.User"); User u = (User)cls.newInstance(); 序列化反序列化 //将一个对象实例化后,进行序列化,再反序列化,也可以获得一个对象(远程通信的场景下使用) O
接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:在 Java 中,你只能继承一个类,但可以实现多个接口。所以一旦你继承了一个类,你就失去了继承其他类的机会了。 接口通常被用来表示附属描述或行为如: Runnable 、 Clonable 、 Serializable 等等,因此当你使用抽象类来表示行为时,你的