摘要: 类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。 1. void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。 2. void shuffle(List) //对List容器内的元素进行随机排 阅读全文
posted @ 2021-09-21 20:51 女王不带冠 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 【示例】遍历List方法一:普通for循环 1 2 3 4 for(int i=0;i<list.size();i++){//list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } 【示例】遍历List方法 阅读全文
posted @ 2021-09-21 20:50 女王不带冠 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 迭代器为我们提供了统一的遍历容器的方式,参见以下示例代码: 【示例】迭代器遍历List 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Test { public static void main(String[] args) { 阅读全文
posted @ 2021-09-21 20:49 女王不带冠 阅读(220) 评论(0) 推荐(0) 编辑
摘要: TreeSet底层实际是用TreeMap实现的,内部维持了一个简化版的TreeMap,通过key来存储Set的元素。 TreeSet内部需要对存储的元素进行排序,因此,我们对应的类需要实现Comparable接口。这样,才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。 【示例 阅读全文
posted @ 2021-09-21 20:48 女王不带冠 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 大家在做下面练习时,重点体会“Set是无序、不可重复”的核心要点。 【示例】HashSet的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Test { public static void main(String[] args) { Set<Str 阅读全文
posted @ 2021-09-21 20:47 女王不带冠 阅读(110) 评论(0) 推荐(0) 编辑
摘要: HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的HashMap),因此,查询效率和增删效率都比较高。我们来看一下HashSet的源码: 我们发现里面有个map属性,这就是HashSet的核心秘密。我们再看add()方法,发现增加一个元素说白了就是 阅读全文
posted @ 2021-09-21 20:47 女王不带冠 阅读(182) 评论(0) 推荐(0) 编辑
摘要: TreeMap是红黑二叉树的典型实现。我们打开TreeMap的源码,发现里面有一行核心代码: 1 private transient Entry<K,V> root = null; root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码: 可以看到里面存储了本身数据 阅读全文
posted @ 2021-09-21 20:46 女王不带冠 阅读(205) 评论(0) 推荐(0) 编辑
摘要: Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此,学习Set的使用将没有任何难度。 Set容器特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重 阅读全文
posted @ 2021-09-21 20:46 女王不带冠 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 二叉树的定义 二叉树是树形结构的一个重要类型。 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。 二叉树(BinaryTree)由一个节点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组 阅读全文
posted @ 2021-09-21 20:45 女王不带冠 阅读(332) 评论(0) 推荐(0) 编辑
摘要: HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于我们以后理解很多技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样),因此,非常有必要让大家理解。 数据结构中由数组和链表来实现对数据的存储,他们各有特点。 (1) 数组:占用空间连续。 寻址容易,查询速度快。但 阅读全文
posted @ 2021-09-21 20:43 女王不带冠 阅读(2249) 评论(1) 推荐(1) 编辑
摘要: HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。 【示例】Map接口中的常用方法 1 2 3 4 5 6 7 8 9 10 11 12 1 阅读全文
posted @ 2021-09-21 20:42 女王不带冠 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 现实生活中,我们经常需要成对存储某些信息。比如,我们使用的微信,一个手机号只能对应一个微信账户。这就是一种成对存储的关系。 Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。 Map 接口的实现类有HashMap、TreeM 阅读全文
posted @ 2021-09-21 20:41 女王不带冠 阅读(70) 评论(0) 推荐(0) 编辑
摘要: LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。 双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。 每个节点都应该有3部分内容: 1 2 3 阅读全文
posted @ 2021-09-21 20:40 女王不带冠 阅读(135) 评论(0) 推荐(0) 编辑
摘要: Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。 比如,indexOf方法就增加了synchronized同步标记。 老鸟建议 如何选用ArrayList、LinkedList、Vector? 1. 需要线程安全时,用Vector。 2. 不存在线程安全问 阅读全文
posted @ 2021-09-21 20:40 女王不带冠 阅读(26) 评论(0) 推荐(0) 编辑
摘要: ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。我们一般使用它。查看源码: 我们可以看出ArrayList底层使用Object数组来存储元素数据。所有的方法,都围绕这个核心的Object数组来开展。 我们知道,数组长度是有限的,而ArrayList是可以存放任意 阅读全文
posted @ 2021-09-21 20:39 女王不带冠 阅读(174) 评论(0) 推荐(0) 编辑
摘要: List是有序、可重复的容器。 有序:List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。 可重复:List允许加入重复的元素。更确切地讲,List通常允许满足 e1.equals(e2) 的元素重复加入容器。 除了Collection接口中的 阅读全文
posted @ 2021-09-21 20:38 女王不带冠 阅读(266) 评论(0) 推荐(0) 编辑
摘要: Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。 表9-1 Collection接口中定义的方法 由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。我们下一节中,通过ArrayL 阅读全文
posted @ 2021-09-21 20:37 女王不带冠 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 我们可以在类的声明处增加泛型列表,如:<T,E,V>。 此处,字符可以是任何标识符,一般采用这3个字母。 【示例】泛型类的声明 1 2 3 4 5 6 7 8 9 10 class MyCollection<E> {// E:表示泛型; Object[] objs = new Object[5]; 阅读全文
posted @ 2021-09-21 20:36 女王不带冠 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 容器相关类都定义了泛型,我们在开发和工作中,在使用容器类时都要使用泛型。这样,在容器的存储数据、读取数据时都避免了大量的类型判断,非常便捷。 【示例】泛型类的在集合中的使用 1 2 3 4 5 6 7 8 9 public class Test { public static void main(S 阅读全文
posted @ 2021-09-21 20:36 女王不带冠 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 开发和学习中需要时刻和数据打交道,如何组织这些数据是我们编程中重要的内容。 我们一般通过“容器”来容纳和管理数据。那什么是“容器”呢?生活中的容器不难理解,是用来容纳物体的,如锅碗瓢盆、箱子和包等。程序中的“容器”也有类似的功能,就是用来容纳和管理数据。 事实上,我们第七章所学的数组就是一种容器,可 阅读全文
posted @ 2021-09-21 20:35 女王不带冠 阅读(28) 评论(0) 推荐(0) 编辑