前言
本周是学习java的第三周,专注于看视频学习而没有做题。。
参考教程:
本周学习要点:
1.接口都是抽象类,[访问修饰符] interface 接口名 [extends 父接口1,父接口2,... ]{常量定义,方法定义}
。
2.内部类:即一个类在另一个类的内部,实例化Outer.Inner inner = new Outer().new Inner()
。
3.System.arraycopy(src, srcPos, dest, destPos, length)
可用于数组自身的拷贝,参数分别是原数组,拷贝位置,目标数组,目标数组起始位置,拷贝长度,若要删除数组内某个元素,只需要对数组自身拷贝后令最后一个值为null即可。数组扩容可以定义另一个更大的数组然后将原数组拷贝过去。
4.Arrays.binarySearch(array,key)
在数组中查找指定数字所在数字内的索引,找不到则返回-1。
5.Arrays.toString()
可将数组打印出来。
6.包装类,因为int,char等不是对象,无法向上获取到Object提供的方法,所以才有了包装类,即是把基本数据类型和一些方法包装到一个类中。
7.包装类可用intvalue doublevalue
等转换成基本数据类型。Integer.parseInt
可把字符串转换成包装类对象,包装类转字符串用`toString。
8.包装类可直接Integer a = 10
=Integer a = Integer.valueof(10)
编译器会帮我们自动装箱。同理,也有自动拆箱,int b = a
=int b = a.intValue()
。
9.两个包装类如Integer a=1234,Integer b =1234
但a!=b,因为他们是两个不同的对象,但比较值a.equals(b)是为true,但若处于[-128,127]范围内则a=b为true,因为[-128,127]处于缓存范围内。
Java集合框架初步了解
在力扣中做了好多题,发现java的题大部分都需要运用到集合框架,该框架提供了一些接口:
1.Collection(Collection 接口存储一组不唯一,无序的对象。)
2.List(List 接口存储一组不唯一,有序(插入顺序)的对象。)
3.Set(Set 接口存储一组唯一,无序的对象。)
4.SortedSet(继承于Set保存有序的集合)
5.Map(Map 接口存储一组键值对象,提供key(键)到value(值)的映射。)
6.Map.Entry(描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。)
7.SortedMap(继承于 Map,使 Key 保持在升序排列。)
8.Enumeration(这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。)
集合框架中提供了一些集合类:
1.AbstractCollection
实现了大部分的集合接口。
2.AbstractList
继承于AbstractCollection 并且实现了大部分List接口。
3.AbstractSequentialList
继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。
4.LinkedList
该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。例如:
Listlist=Collections.synchronizedList(newLinkedList(...));
LinkedList 查找效率低。
5.ArrayList
该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。
6.AbstractSet
继承于AbstractCollection 并且实现了大部分Set接口。
7.HashSet
该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
8.LinkedHashSet
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
9.TreeSet
该类实现了Set接口,可以实现排序等功能。
10.AbstractMap
实现了大部分的Map接口。
11.HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
12.TreeMap
继承了AbstractMap,并且使用一颗树。
13.WeakHashMap
继承AbstractMap类,使用弱密钥的哈希表。
14.LinkedHashMap
继承于HashMap,使用元素的自然顺序对元素进行排序.
15.IdentityHashMap
继承AbstractMap类,比较文档时使用引用相等。
目前我对于集合框架还没做进一步了解,正在看视频学习中。
回溯算法
大致就是对问题进行探索求解,但不满足条件时就进行回溯,调用它自己,实际上也就是递归,事实上就是把问题的每一种可能都列出来,也就是穷举法。回溯法可以理解为通过选择不同的岔路口寻找目的地,一个岔路口一个岔路口的去尝试找到目的地。如果走错了路,继续返回来找到岔路口的另一条路,直到找到目的地。
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
这道题我目前的思路就是使用回溯法,在棋盘上对于皇后而言放置一只皇后之后它的行与列以及对角线都不能放置其他皇后,所以是使用回溯法在每下一次之后若不满足则回溯。但限于我能力我目前连官方给的题解都看不懂。。所以还需要再进一步学习java的集合与泛型。
欢迎访问我的博客www.redmango.top