算法
Lambda表达式
作用:用于简化匿名内部类代码的书写。
Swimming s = new Swimming(){
@Override
public void swim() {
System.out.println("学生快乐的游泳~~~~");
}
};
//简化
Swimming s1 = () -> {
System.out.println("学生快乐的游泳~~~~");
};
算法
冒泡
-
排序算法:冒泡排序
-
核心思路:每次把相邻的两个元素比较,大的往后放
选择
-
选择排序的核心思路是,每一轮选定一个固定的元素,和其他的每一个元素进行比较;
-
经过几轮比较之后,每一个元素都能比较到了。
二分查找
-
二分查找的主要特点是,每次查找能排除一般元素,这样效率明显提高。
-
但是二分查找要求比较苛刻,它要求元素必须是有序的,否则不能进行二分查找。
-
第1步:先定义两个变量,分别记录开始索引(left)和结束索引(right) 第2步:计算中间位置的索引,mid = (left+right)/2; 第3步:每次查找中间mid位置的元素,和目标元素key进行比较 如果中间位置元素比目标元素小,那就说明mid前面的元素都比目标元素小 此时:left = mid+1 如果中间位置元素比目标元素大,那说明mid后面的元素都比目标元素大 此时:right = mid-1 如果中间位置元素和目标元素相等,那说明mid就是我们要找的位置 此时:把mid返回 注意:一搬查找一次肯定是不够的,所以需要把第1步和第2步循环来做,只到left>end就结束,如果最后还没有找到目标元素,就返回-1.
正则表达式
记不住,遇到了网上找;
集合
异常
try--catch
集合分类
●Collection代表单列集合,每个元素(数据)只包含一个值。 ●Map代表双列集合,每个元素包含两个值(键值对)。
List系列集合:添加的元素是有序、可重复、有索引。 ArrayList、LinekdList:有序、可重复、有索引l。 Set系列集合:添加的元素是无序、不重复、无索引l。 HashSet:无序、不重复、无索引l; LinkedHashSet:有序、不重复、无索引l。 TreeSet: 按照大小默认升序排序、不重复、无索引。
Collection集合
方法
添加元素到集合
c.add("java")
获取集合的大小
c.size()
判断集合中是否包含某个元素
c.contains("java")
删除某个元素,如果有多个重复元素只能删除第一个
c.remove("java")
清空集合的元素
c.clear();
判断集合是否为空 是空返回true 反之返回false
c.isEmpty()
把集合转换为数组
c.toArray()
还可以把一个集合中的元素,添加到另一个集合中
c1.addAll(c2); //把c2集合中的全部元素,添加到c1集合中去
ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet集合都可以调用这些方法
遍历方式
常用
Collection<String> c = new ArrayList<>();
//使用增强for遍历集合
for(String s: c){
System.out.println(s);
}
List集合
方法
在某个索引位置插入元素
list.add(2, "kussmcx");
根据索引删除元素, 返回被删除的元素
list.remove(2)
返回集合中指定位置的元素
list.get(3)
修改索引位置处的元素,修改后,会返回原数据
list.set(3,"kussmcx")
遍历
//常用:增强for遍历
for(String s : list){
System.out.println(s);
}
底层逻辑
ArrayList集合底层是基于数组结构实现的
查询速度快 删除效率低 添加效率极低
LinkedList底层是链表结构,
链表的特点1:查询慢,无论查询哪个数据都要从头开始找。 链表的特点2:链表增删相对快
LInkedList集合可以用它来设计栈结构、队列结构。
Set集合
HashSet集合
哈希表 = 数组+链表+红黑树
LinkedHashSet集合
HashSet的子类LinkedHashSet类
nkedHashSet它底层采用的是也是哈希表结构,只不过额外新增了一个双向链表来维护元素的存取顺序。
TreeSet集合
TreeSet集合的特点是可以对元素进行排序,但是必须指定元素的排序规则。
我们想要告诉TreeSet集合按照指定的规则排序,有两种办法:
第一种:让元素的类实现Comparable接口,重写compareTo方法
第二种:在创建TreeSet集合时,通过构造方法传递Compartor比较器对象
Set<Student> students = new TreeSet<>(new Comparator<Student>{
@Override
public int compare(Student o1, Student o2){
//需求:按照学生的身高排序
return Double.compare(o1,o2);
}
});
总结Collection集合
Collection集合特点 List系列集合:添加的元素是有序、可重复、有索引。 ArrayList、LinekdList:有序、可重复、有索引l。
Set系列集合:添加的元素是无序、不重复、无索引。 HashSet:无序、不重复、无索引l; LinkedHashSet:有序、不重复、无索引l。 TreeSet:按照大小默认升序排序、不重复、无索引。
Collections工具类
对集合批量添加数据
List<String> names = new ArrayList<>();
Collections.addAll(names, "ljx","ljc","kussmcx");
对集合打乱顺序
Collections.shuffle(names);
对List集合排序
List<Integer> list = new ArrayList<>();
Collections.sort(list);
Map集合
Map集合有如下的特点:键不能重复,值可以重复,每一个键只能找到自己对应的值。
// Map<String, Integer> map = new HashMap<>(); // 一行经典代码。
// 1.添加元素: 无序,不重复,无索引。
Map<String, Integer> map = new HashMap<>();
map.put("手表", 100);
// 2.public int size():获取集合的大小
map.size()
// 3、public void clear():清空集合
map.clear();
// 4.public boolean isEmpty(): 判断集合是否为空,为空返回true ,反之!
map.isEmpty()
// 5.public V get(Object key):根据键获取对应值
map.get("手表");
// 6. public V remove(Object key):根据键删除整个元素(删除键会返回键的值)
map.remove("手表")
// 7.public boolean containsKey(Object key): 判断是否包含某个键 ,包含返回true ,反之
map.containsKey("手表")
// 8.public boolean containsValue(Object value): 判断是否包含某个值。
map.containsValue(2)
// 9.public Set<K> keySet(): 获取Map集合的全部键。
map.keySet()
// 10.public Collection<V> values(); 获取Map集合的全部值。
map.values();
// 11.把其他Map集合的数据倒入到自己集合中来。(拓展)
map1.putAll(map2); // putAll:把map2集合中的元素全部倒入一份到map1集合中去。
遍历
一、
// 1、获取Map集合的全部键
Set<String> keys = map.keySet();
// 2、遍历全部的键,根据键获取其对应的值
for (String key : keys) {
// 根据键获取对应的值
double value = map.get(key);
}
二、
// 1、调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合
Set<Map.Entry<String, Double>> entries = map.entrySet();
for (Map.Entry<String, Double> entry : entries) {
String key = entry.getKey();
double value = entry.getValue();
System.out.println(key + "---->" + value);
}
三、常用
//遍历map集合,传递匿名内部类
map.forEach(new BiConsumer<String, Double>() {
@Override
public void accept(String k, Double v) {
System.out.println(k + "---->" + v);
}
});
//遍历map集合,传递Lambda表达式
map.forEach(( k, v) -> {
System.out.println(k + "---->" + v);
});
HashMap(常用)
无序、不能重复,而且没有索引的
决定键是否重复依赖与两个方法,一个是hashCode方法、一个是equals方法。有两个键计算得到的hashCode值相同,并且两个键使用equals比较为true,就认为键重复。
往Map集合中存储自定义对象作为键,为了保证键的唯一性,我们应该重写hashCode方法和equals方法。
LinkedHashMap
有序的、不重复、无索引。
TreeMap
默认按照键的升序排列,键不重复,也是无索引的。
排序方法
//第一种
//第一步:先让Student类,实现Comparable接口
public class Student implements Comparable<Student>{
@Override
public int compareTo(Student o) {
//this:表示将要添加进去的Student对象
//o: 表示集合中已有的Student对象
return this.age-o.age;
}
//第二种
Map<Student, String> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return Double.compare(o1.getHeight(), o2.getHeight());
}
});
// Map<Student, String> map = new TreeMap<>(( o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight()));
只有TreeMap的键才能排序,HashMap键不能排序。
集合嵌套
HashMap<String, List<String>> map = new HashMap<>();
下一篇