动态数组——ArrayList
ArrayList类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素;ArrayList 继承了 AbstractList ,并实现了 List 接口。
实例化方法:ArrayList<T> arr = new ArrayList<>(); 其中T为泛型数据类型
ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
函数方法:
add():添加元素到ArrayList,如 arr.add("Weibo")就是在arr最后加上一个元素,叫"Weibo"。
remove():删除ArrayList中的元素,如arr.remove(3)就是删除第四个元素。
set():修改ArrayList中的元素,其中第一个参数为索引位置,第二个为要修改的值。
如arr.set(2, "Wiki")就是把第三个元素的值修改为"Wiki"。
get():参数为索引,获取对应位置的值。
LinkedList(栈,队列,容器)
LinkedList既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(stack),它的底层通过双向链表实现,双向链表的每个节点用内部类Node表示,通过first和last引用分别指向链表的第一个和最后一个元素。
栈(Stack)
废弃栈的实例化方法:Stack<T> stack = new Stack<>();
现在栈的实例化方法:Deque<T> stack = new LinkedList<Integer>();
或者直接用LinkedList<T> stack
函数方法
peek():查看堆栈顶部的对象,但不从堆栈中移除它,和pop()区分(查看且删除)。
isEmpty():判断栈是否为空。
push():把项压入堆栈顶部,对应的删除是pop()。
队列(Queue)
Queue 作为先进先出队列,只能从头部取元素、插入元素到尾部。Java 同样定义了双向队列 Deque,可以同时在头部、尾部插入和取出元素。
实例化方法: LinkedList<T> queue = new LinkedList<>();
或者 Queue<T> queue = new LinkedList<>();
函数方法
压入元素(添加):add()、offer()
相同:未超出容量,从队尾压入元素,返回压入的那个元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false。
弹出元素(删除):remove()、poll()
相同:容量大于0的时候,删除并返回队头被删除的那个元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false。
获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。
addFirst()/addLast():插入元素到队列头部/尾部,失败则抛出异常。
removeFirst()/removeLast():取出并移除头部元素/尾部元素,空队列抛出异常。
peekFirst()/peekLast():取出但不移除头部元素/尾部元素,空队列返回null。
size():获取队列长度。
优先队列(堆,PriorityQueue)
添加到 PriorityQueue 队列里面的元素都经过了排序处理,默认按照自然顺序,也可以通过 Comparator 接口进行自定义排序。它采用树形结构来描述元素的存储,具体说是通过完全二叉树实现一个小顶堆,在物理存储方面,PriorityQueue 底层通过数组来实现元素的存储。
由于 PriorityQueue 的底层是基于堆实现的,因此在数据量比较大时,使用 PriorityQueue 可以获得较好的时间复杂度。
优先队列默认的是最小堆(优先弹出最小值)
实例化方法:
最小堆(默认):PriorityQueue<T> queue = new PriorityQueue<>();
最大堆:PriorityQueue<T> queue = new PriorityQueue<>(int capacity, (num1, num2) -> num2-num1);
方法:peek、poll、add、isEmpty、size…(类似队列)
集合(Map、List、Set)
HashMap 是 Java 中非常常用的数据结构之一,用于存储键值对。在 HashMap 中,每个键都映射到一个唯一的值,可以通过键来快速访问对应的值,算法时间复杂度可以达到 O(1)。
哈希表(HashMap)
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。它实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。
HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。
HashMap 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。
实例化方法:HashMap<T_Key, T_Value> map = new HashMap<>();
函数方法:
containsKey() / containsValue():检查 hashMap 中是否存在指定的 key / value 对应的映射关系,它是一个布尔类型的值,有则返回true,没有则返回false。
get():获取指定 key 对应的 value 值,比如map.get("key")。
getOrDefault():这个和get的方法为了实现的目的一样,只是它有两个参数,第一个参数是key,第二个是如果没找到设定的默认值,如getOrDefault(4, "Not Found"),没找到就返回Not Found。
isEmpty():判断hashMap是否为空。
put():将键值对加到hashMap中。
keySet():返回hashMap中所有key组成的集合视图。
entrySet():返回 hashMap 中所有映射项的集合集合视图。
remove():有两个方法,删除 hashMap 中指定键 key 的映射关系。
replace():替换 hashMap 中是指定的 key 对应的 value。以key为参数的remove方法 输入key–>key存在就删除;以key+value为参数的remove方法 必须key和value都正确才删除。
size():删除 hashMap 中指定键 key 的映射关系。
哈希集(HashSet)
List接口
有序表TreeMap
底层基于红黑树实现,是一棵平衡二叉搜索树,它的键是有序排列的
实例化:TreeMap<T1, T2> treeMap = new TreeMap<>();可以传入Comparator实现自定义排序,否则自动按键的默认方法排序
方法:firstKey、lastKey、containsKey、get、getOrDefault、isEmpty、put、remove…
TreeSet类似
类型转化
char与String互相转换
String s = String.valueOf(‘c’); //效率最高的方法
String s = String.valueOf(new char[]{‘a’,‘c’}); //将一个char数组转换成String
char[] sArr = s.toCharArray();
String转int
int i=Integer.parseInt(s);
int i=Integer.valueOf(s).intValue();
int转String
String s = String.valueOf(i);
String s = Integer.toString(i);
String s = “” + i;
StringBuilder构建String
被synchronize修饰的StringBuffer是线程安全的,但刷题为了效率一般都用StringBuilder
实例化:StringBuilder sb = new StringBuilder();
构建String: sb.toString
方法:append、toString、insert、delete…