数据结构:
栈(stack):先进后出。
队列(queue)):先进先出。
数组(Array):查询快,增删慢。
链表(linked list):查询慢,增删快。
单项链表:只有一条链,不能保证顺序。
双项链表:有两条链,一条记录序号,保证顺序。
红黑树: 速度特别快,趋近平衡树,查找叶子元素少和多次数不多于二倍
红黑树的约束: 1. 节点可以是红色的或者黑色的
2. 根节点是黑色的
3. 叶子节点(特指空节点)是黑色的
4. 每个红色节点的子节点都是黑色的
5. 任何一个节点到其每一个叶子节点的所有路径上黑 色节点数相同 红黑树的特点:
二叉树:每个节点不超过2的有序树。
排序树:左大右小。
平衡树:左右相等。
不平衡树:左右不相等
List集合:
特点:
有序,有索引,元素可重复。
特有方法:
public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。
public E get(int index) :返回集合中指定位置的元素。 public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。
public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
注意:
防止越界异常。
Linkedlist集合
1.是双链表结构,方便元素添加与删除。
2.里面包含大量操作首位元素方法。
注:使用linkedlist集合特有方法,不能使用多态
常用特有方法:
1.public void addFirst(E e) :将指定元素插入此列表的开头。
2.public void addLast(E e) :将指定元素添加到此列表的结尾。
3.public E getFirst() :返回此列表的第一个元素。
4.public E getLast() :返回此列表的后一个元素。
5.public E removeFirst() :移除并返回此列表的第一个元素。
6.public E removeLast() :移除并返回此列表的后一个元素。
7.public E pop() :从此列表所表示的堆栈处弹出一个元素。
(等同于removefirst)
8.public void push(E e) :将元素推入此列表所表示的堆栈。
(等同于addfirst)
9.public boolean isEmpty() :如果列表不包含元素,则返回true
Vector集合
数组结构,单线程。
已被Arraylist取代。
Set集合
不能存储重复元素,没有索引,不能使用普通的for循环遍历。
HashSet集合是它的实现类。
HashSet集合
1.不能存储重复元素。
2.没有索引,没有带索引的方法,不能使用for循环遍历。
3.是一个无序集合。
4.底层是一个哈希表结构。
5.自定义时必须重写hashcode和equals方法。
LinkedHashSet集合
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序。
可变参数
使用方法:
当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。
使用格式:
修饰符 返回值类型 方法名(数据类型。。。变量名){ }
可变参数的原理:
底层是数组。
传递参数个数可以是0个也可以多个。
注意事项:
1.一个方法的参数列表,只能有一个可变参数。
2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
Collections集合工具类
常用方法:
1.public static <T> boolean addAll(Collection<T> c, T... elemen ts) :往集合中添加一些元素。
2.public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。
3.public static <T> void sort(List<T> list) :将集合中元素按照默认 规则排序。
4.public static <T> void sort(List<T> list, Comparator<? super T> ) :将集合中元素按照指定规则排序。
注意事项:
Sort方法使用前提
被排序的集合里边储存的元素,必须实现comparable接口重写compareTo方法。
年龄升序排列:
Return this.getAge()-(参数)o.getAge();
降序与之相反
自定义比较规则:比较两个人的年龄(this,参数person)=升序排序=>return this.getAge() - o.getAge()(反之降序)
static <T> void sort(List<T> list,Comparator<? super T>)排序方法
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int result =o1.getAge()-o2.getAge();
if(result ==0){
result =o1.getname().charAt(0)-o2.getname().charAt(0)
}return result;
}
});
Map集合
特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个 value)。
2.Map集合中的元素,key和value的数据类型可以相同,也可以不 同。
3.Map集合中的元素,Key可以重复,value不能重复。
4.Map集合中的元素,Key和value是一一对应的。
Map常用实现类:
HashMap类(HashMap《k,v》implements Map《k,v》):
1.底层是哈希表,查询速度特别快。
2.无序集合。
LinkedHashMap类(LinkedHashMap《k,v》HashMap《k,v》)
1.底层是哈希表+链表(保证顺序)。
2.有序集合。
Map常用方法:
1.PublIc v put(k key,v value);把指定的键与指定的值添加到Map 集合中。(key不重复,返回值为null;重复用新的value替换重复的 value返回被替换的value)
2.public V remove(Object key) : 把指定的键 所对应的键值对元素 在 Map集合中删除,返回被删除元素的 值。(key存在v返回被删除的值, 不存在,v返回null)
3.public V get(Object key) 根据指定的键,在Map集合中获取对应的 值。(key存在,返回对应的value值;不存在,返回null)
4.Boolean containskey(Object key)判断集合中是否包含指定的键。
(包含返回true,不包含返回false)
5.public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集 合中。 (遍历Map集合方法之一)
6.public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有 的键值对对象的集合(Set集合)。(遍历Map集合方法之一)
HashMap储存自定义类型键值:
Map集合保证KEY是唯一的。
在所在类里重写Hashcode和equals。
LinkedHashMap集合 entends HashMap
底层原理:
哈希表+链表(记录元素的顺序)
有序的。
Throwable:
1.Error:工程师不能修复,只能修改代码。
2.Exception:由于使用不当所导致,可以避免。
处理异常:
1.往上抛,虚拟机处理。
2.Try{}catch(){}处理异常,处理完后程序继续处理。
throw关键字:
作用:
可以使用throw关键字在指定的方法中抛出指定的异常。
格式:
throw new xxxException(”异常产生的原因”);
注意:
1.throw关键字必须写在方法的内部。
2.throw关键字后边new的对象必须是Exception或者Exception 的之类对象。
3.throw关键字抛出指定的异常对象,我们就必须处理这个异常对象。
Throw关键字后边创建的是RuntimeException或者是RuntimeException的子类对象,我们可以不处理,默认交个JVM处理(打印异常对象,中断程序)。
throw关键字后边创建的是编译异常(写代码时报错)我们就必须处理这个异常要么throws要么try。。。Catch。。。
终结:
1.throw:写在方法内部,我们终结抛异常,我们可以自定义异常的信息。
2.throws:写在方法上,JVM帮我们抛异常,使用默认异常信息。
Obects类中的静态方法:
Publicstatic《t》 T requireNonNull(T obj):查看指定引用对象是否为null
throws关键字:
作用:
当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象。
抛出方法的调用者处理,最终交给JVM处理(中断处理)。
格式:在方法声明时使用
注意:
1.throws关键字必须写在方法声明处。
2.Throws关键字后边声明的异常必须是Exception或者Exception的子类。
3.方法内部如果抛出了多个异常对象,那么throws后边必须也声明多个异常如果多个异常对象有子父类关系,那么直接声明父类异常即可。
4.调用了一个声明抛出异常的方法,我们就必须大狐狸声明的异常要么继续使用throws声明抛出,交个方法的调用者处理,最终交个JVM要么try。。。Catch自己处理异常。
Try...catch:异常处理的第二种方法,自己处理异常。
格式:
Try{
可能产生异常的代码
}catch(定义一个异常的变量,用来接收try中抛出的异常对象){
异常的处理逻辑,异常对象之后,怎么处理异常对象
一般在工作中,会把异常的信息记录到一个日志中
}
...
Catch(异常类名 变量名){
}
注意:
1.try中可能会抛出多个异常对象,那么久可以使用多个catch来处理。
2.如果try中产生了异常,那么久会执行catch中的异常处理逻辑,自行完毕catch继续执行值胡的代码。如果没有产生异常,则直接执行之后的代码。
finally关键字:
finally里的代码无论如何都会执行。
注意:
1.finally不能单独使用,必须和try一起使用。
2.一般用于资源释放(资源回收)无论程序是否出现异常,最后都要资源释放(IO)
自定义异常类:
JAVA提供的异常类,不够我们使用,需要自己定义一些异常类。
格式:
Public class XXXException extends Exception/RuntimeException{
添加一个空参数的构造方法
添加一个带异常信息的构造方法
}
注意:
1.自定义异常类一般都是以Exception结尾,说明该类是一个异常类。
2.自定义异常类,必须的继承Exception或者RuntimeException
继承Exception:那么自定义异常类是一个编译期异常,如果方法内部抛出了编译期异常,就必须处理这个异常,要么throws/要么try...catch
继承RuntimeException:那么自定义的异常就是一个运行期异常.无序处理, 交给JVM处理
线程:
并发:指两个或多个事件在同一个时间段内发生。
并行:指两个或多个事件在同一时刻发生(同时发生)。
多线程:
创建多线程程序的第一种方法:创建thread类的子类。
实现步骤:
1.创建一个thread类的子类。
2.在thread类的子类中重写run方法。
3.常见thread类的子类方法
|
|