Set及其实现类的特点
Set是Collection的子接口,用来存储无序的,不可重复的数据
HashSet(主要实现类):底层是hashMap,即使用数组+单向链表+红黑树结构进行存储(JDK8.0中)
LinkedHashSet(是HashSet的子类),在使用数组+单向链表+红黑树结构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序,即可以...
ArrayList(主要实现类)效率高、线程不安全:底层使用Object[] 对象类型大的数组
添加数据、查找数据效率比较高;插入、删除数据时效率比较低。
LinkedList:底层使用双向链表存储,
插入、删除数据时效率比较高;在添加、查找数据时效率比较低。
Vector:(List古老的实现类)线程安全、效率低:底层使用Object[] 对象类型大的数组...
List(动态数组)存储特点:有序、可重复
常用方法:
Collection中的14个方法
因为List是有序的进而就有索引,进而就有一些针对索引的操作
•插入元素
方法
作用
–void add(int index, Object ele)
在index位置插入ele元素
–boolean addAll(int index, ...
java.util.Collection:存储一个一个的数据
子接口
List:有序的、可以重复的数据(相当于“动态”数组)
具体实现类: ArrayList(主要实现类,底层还是数组)、LinkedList、Vector
Set:存储无序的、不可重复的数据(不可重复)
具体实现类:HashSet(主要实现类)、LinkedHashSet、TreeS...
1. 概念
在存储多个数据时可以考虑 集合和数组,它们是存储在内存中,也就是断电后就消失了。
2. 数组存储的特点
特点
缺点
一旦初始化,长度确定
长度不可变
数据是紧密排列的,有序的,可重复的
存储数据类型单一,对无序、不可重复存储比较困难
元素的类型可以是基本数据类型也可以是引用数据类型
可用的方法、属性极少
3. Java...
1. System类
属性:out、in、err
方法
作用
currentTimeMillis()
获取当前时间戳
exit()
退出,参数为0表示正常退出,非0表示异常退出
gc()
请求垃圾回收
getProperty
获取参数
public class SystemTest {
public static vo...
直接创建类的对象,直接使用,不赋值给对象,就是匿名对象
问题
常见的基本数据类型 int char 这种可以进行比较排序,那么引用数据类型(对象)该怎么进行排序呢?
有两种方法,自然排序(Comparable)、定制排序(Comparator)
方式一
在需要比较的类实现Comparable接口,实现compareTo方法。
public class ComparableTest {
public ...
在Date后引入的Calendar也不能很好的规范时间的数据类型,
在JDK8.0时引入了Time这一新的包
方法不用背,现用现查也可以
之前存在的问题
Date和Calendar修改时间时,本身的数值也会改变。如果保留原数值还要备份,很麻烦。
偏移量,创建时间的年份会自动加1970年。 如果创建参数是2000,创建出来就会是3970年。很麻烦
格式化,S...
System类的currentTimeMillis()
获取当前时间的毫秒,long类型,时间戳
当前时间与1970年1月1日之间的毫秒数
两个Date类
java.util.Date
public classDateDemo {
public static void main(String[] args) {
Date ...
类的声明
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
final:不可被继承、
Serializable:可序列化的接口。---凡是实现序列化接口的类就可以通过网络、IO流进行传输。
Compar...
在JUC高并发中会有详细讲解
现有问题
并发线程很多,有很多线程执行的时间很短,就需要频繁的创建和销毁,使得系统效率降低。
思路
提前创建好多个线程,放入线程池,使用时直接提取,使用后放回线程池,增加线程的复用性。
好处
提高了程序执行的效率。
线程提前创建好
提高资源复用率
可以设置相关参数对池中线程使用进行管理
例子
import java.util...
概念
当需要多个线程共同完成一个任务时,需要它们有规律的执行,多个线程之间需要一些通信的机制,以实现共同操作一份数据。
说是通讯机制,并不是让线程之间会交流讲话,而是用几个方法来控制线程直线通断的顺序。
例如:线程a生产包子,线程b负责吃包子。b线程就需要等a线程执行完毕才可以执行。
实例,两个线程交替打印100以内的数字
使用notify和wait方法交替...
概念
不同的线程都在等待对方的线程结束而不放弃,造成了大家都在等待情况叫做死锁。
public class deadLocker {
public static void main(String[] args) {
StringBuilder sb1=new StringBuilder();
StringBuilde...
之前讲的单例模式中的懒汉模式是在调用时才会生成一个对象以供使用,
为了防止同时多个线程创建多个对象就需要考虑到线程安全的问题。
方式一:
给getInstance()添加synchronized符号
public class BankTest {
static Bank b1=null;
static Bank b2=null;
pu...