杭州哪个网站建设最好,左右左右网站,做宴会网站,wordpress 表情拉长Java 集合框架
该框架必须是高性能的。基本集合#xff08;动态数组#xff0c;链表#xff0c;树#xff0c;哈希表#xff09;的实现也必须是高效的。
该框架允许不同类型的集合#xff0c;以类似的方式工作#xff0c;具有高度的互操作性。
对一个集合的扩展和适应…Java 集合框架
该框架必须是高性能的。基本集合动态数组链表树哈希表的实现也必须是高效的。
该框架允许不同类型的集合以类似的方式工作具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
Set和List的区别 Set 接口实例存储的是无序的不重复的数据。List 接口实例存储的是有序的可以重复的元素。 Set 检索效率低下删除和插入效率高插入和删除不会引起元素位置改变 实现类有HashSet,TreeSet。 List 和数组类似可以动态增长根据实际存储的数据的长度自动增长 List 的长度。查找元素效率高插入删除效率低因为会引起其他元素位置改变 实现类有ArrayList,LinkedList,Vector
Java ArrayList
ArrayList 类是一个可以动态修改的数组与普通数组的区别就是它是没有固定大小的限制我们可以添加或删除元素。
ArrayList 继承了 AbstractList 并实现了 List 接口 引用
import java.util.ArrayList; // 引入 ArrayList 类
ArrayListE objectName new ArrayList(); // 初始化 尖括号里写数组的数据类型import java.util.ArrayList;public class RunoobTest {public static void main(String[] args) {ArrayListString sites new ArrayListString();sites.add(Google);sites.add(Runoob);sites.add(Taobao);sites.add(Weibo);System.out.println(sites);}
}方法描述add()将元素插入到指定位置的 arraylist 中addAll()添加集合中的所有元素到 arraylist 中clear()删除 arraylist 中的所有元素clone()复制一份 arraylistcontains()判断元素是否在 arraylistget()通过索引值获取 arraylist 中的元素indexOf()返回 arraylist 中元素的索引值removeAll()删除存在于指定集合中的 arraylist 里的所有元素remove()删除 arraylist 里的单个元素size()返回 arraylist 里元素数量isEmpty()判断 arraylist 是否为空subList()截取部分 arraylist 的元素set()替换 arraylist 中指定索引的元素sort()对 arraylist 元素进行排序toArray()将 arraylist 转换为数组toString()将 arraylist 转换为字符串ensureCapacity()设置指定容量大小的 arraylistlastIndexOf()返回指定元素在 arraylist 中最后一次出现的位置retainAll()保留 arraylist 中在指定集合中也存在的那些元素containsAll()查看 arraylist 是否包含指定集合中的所有元素trimToSize()将 arraylist 中的容量调整为数组中的元素个数removeRange()删除 arraylist 中指定索引之间存在的元素replaceAll()将给定的操作内容替换掉数组中每一个元素removeIf()删除所有满足特定条件的 arraylist 元素forEach()遍历 arraylist 中每一个元素并执行特定操作
Java LinkedList
简单来说就是对头和尾的数据频繁操作用LinkedList 链表Linked list是一种常见的基础数据结构是一种线性表但是并不会按线性的顺序存储数据而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。 一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。 Java LinkedList链表 类似于 ArrayList是一种常用的数据容器。
与 ArrayList 相比LinkedList 的增加和删除的操作效率更高而查找和修改的操作效率较低。
以下情况使用 ArrayList : 频繁访问列表中的某一个元素。 只需要在列表末尾进行添加和删除元素操作。 以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。 LinkedList 继承了 AbstractSequentialList 类。 LinkedList 实现了 Queue 接口可作为队列使用。 LinkedList 实现了 List 接口可进行列表的相关操作。 LinkedList 实现了 Deque 接口可作为队列使用。 LinkedList 实现了 Cloneable 接口可实现克隆。 LinkedList 实现了 java.io.Serializable 接口即可支持序列化能通过序列化去传输。
// 引入 LinkedList 类
import java.util.LinkedList; LinkedListE list new LinkedListE(); // 普通创建方法
或者
LinkedListE list new LinkedList(Collection? extends E c); // 使用集合创建链表普通的例子
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedListString sites new LinkedListString();sites.add(Google);sites.add(Runoob);sites.add(Taobao);sites.add(Weibo);System.out.println(sites);}
}常用方法
方法描述public boolean add(E e)链表末尾添加元素返回是否成功成功为 true失败为 false。public void add(int index, E element)向指定位置插入元素。public boolean addAll(Collection c)将一个集合的所有元素添加到链表后面返回是否成功成功为 true失败为 false。public boolean addAll(int index, Collection c)将一个集合的所有元素添加到链表的指定位置后面返回是否成功成功为 true失败为 false。public void addFirst(E e)元素添加到头部。public void addLast(E e)元素添加到尾部。public boolean offer(E e)向链表末尾添加元素返回是否成功成功为 true失败为 false。public boolean offerFirst(E e)头部插入元素返回是否成功成功为 true失败为 false。public boolean offerLast(E e)尾部插入元素返回是否成功成功为 true失败为 false。public void clear()清空链表。public E removeFirst()删除并返回第一个元素。public E removeLast()删除并返回最后一个元素。public boolean remove(Object o)删除某一元素返回是否成功成功为 true失败为 false。
链接: https://www.runoob.com/manual/jdk11api/java.base/java/util/LinkedList.html
Java HashSet
HashSet 基于 HashMap 来实现的是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的即不会记录插入的顺序。 HashSet 不是线程安全的 如果多个线程尝试同时修改 HashSet则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。 HashSet 实现了 Set 接口。
import java.util.HashSet; // 引入 HashSet 类
HashSetString sites new HashSetString();// 引入 HashSet 类
import java.util.HashSet;public class RunoobTest {public static void main(String[] args) {HashSetString sites new HashSetString();sites.add(Google);sites.add(Runoob);sites.add(Taobao);sites.add(Zhihu);sites.add(Runoob); // 重复的元素不会被添加sites.remove(Taobao); // 删除元素删除成功返回 true否则为 falseSystem.out.println(sites);for (String i : sites) {System.out.println(i);//迭代}}
}Java HashMap
HashMap 是一个散列表它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口根据键的 HashCode 值存储数据具有很快的访问速度最多允许一条记录的键为 null不支持线程同步。 HashMap 是无序的即不会记录插入的顺序。 HashMap 继承于AbstractMap实现了 Map、Cloneable、java.io.Serializable 接口。
import java.util.HashMap; // 引入 HashMap 类HashMapInteger, String Sites new HashMapInteger, String();// 引入 HashMap 类
import java.util.HashMap;public class RunoobTest {public static void main(String[] args) {// 创建 HashMap 对象 SitesHashMapInteger, String Sites new HashMapInteger, String();// 添加键值对Sites.put(1, Google);Sites.put(2, Runoob);Sites.put(3, Taobao);Sites.put(4, Zhihu);// 输出 key 和 valuefor (Integer i : Sites.keySet()) {System.out.println(key: i value: Sites.get(i));}// 返回所有 value 值for(String value: Sites.values()) {// 输出每一个valueSystem.out.print(value , );}}
}Java 多线程编程
程序中有两个子系统需要并发执行这时候就需要利用多线程编程。 Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流一个进程中可以并发多个线程每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程一个进程包括由操作系统分配的内存空间包含一个或多个线程。一个线程不能独立的存在它必须是进程的一部分。一个进程一直运行直到所有的非守护线程都结束运行后才能结束。 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。
就绪状态: 当线程对象调用了start()方法之后该线程就进入就绪状态。就绪状态的线程处于就绪队列中要等待JVM里线程调度器的调度。
运行状态: 如果就绪状态的线程获取 CPU 资源就可以执行 run()此时线程便处于运行状态。处于运行状态的线程最为复杂它可以变为阻塞状态、就绪状态和死亡状态。
阻塞状态: 如果一个线程执行了sleep睡眠、suspend挂起等方法失去所占用资源之后该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种
等待阻塞运行状态中的线程执行 wait() 方法使线程进入到等待阻塞状态。
同步阻塞线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。
其他阻塞通过调用线程的 sleep() 或 join() 发出了 I/O 请求时线程就会进入到阻塞状态。当sleep() 状态超时join() 等待线程终止或超时或者 I/O 处理完毕线程重新转入就绪状态。
死亡状态: 一个运行状态的线程完成任务或者其他终止条件发生时该线程就切换到终止状态。
线程的优先级 每一个 Java 线程都有一个优先级这样有助于操作系统确定线程的调度顺序。
Java 线程的优先级是一个整数其取值范围是 1 Thread.MIN_PRIORITY - 10 Thread.MAX_PRIORITY 。
默认情况下每一个线程都会分配一个优先级 NORM_PRIORITY5。
具有较高优先级的线程对程序更重要并且应该在低优先级的线程之前分配处理器资源。但是线程优先级不能保证线程执行的顺序而且非常依赖于平台。
创建一个线程 Java 提供了三种创建线程的方法
通过实现 Runnable 接口 通过继承 Thread 类本身 通过 Callable 和 Future 创建线程。
创建线程的三种方式的对比
采用实现 Runnable、Callable 接口的方式创建多线程时线程类只是实现了 Runnable 接口或 Callable 接口还可以继承其他类。使用继承 Thread 类的方式创建多线程时编写简单如果需要访问当前线程则无需使用 Thread.currentThread() 方法直接使用 this 即可获得当前线程。