普通數組
數組的定義:
數組是相同類型的有序集合。數組描述的是相同類型的若干個數據,按照一定的先後次序排列組合而成。其中,每一個數據稱作一個數組元素,每個數組元素可以通過一個下標來訪問它們。
數組的基本特點:
- 其長度在創建是就確定,並且不能修改。
- 其元素的類型必須相同。
- 其元素可以是任何數據,包括基本類型和醫用類型。
- 數組的索引可以有含義,比如可以是學號等。
數組的創建和初始化
聲明數組
// 阿里巴巴強制規範
type[] arr_name;
type arr_name[];
初始化數組
1. 靜態初始化
int[] a = {1, 2, 3};
Man[] mans = {
new Man(1, 1);
new Man(2, 2);
};
2. 動態初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
3. 數組的默認初始化
// {0, 0}
int[] a = new int[2];
// {false, false}
boolean[] b = new boolean[2];
// {null, null}
String[] s = new String[2];
4. 數組的界限
下標的合法區間[0, length-1]
動態數組
動態數組的定義:
Java中的ArrayList就是動態數組,提供了動態的增加和減少元素。
動態數組的基本特點:
- 數組大小可隨元素多少自動調整。
- 不能存儲基本數據類型。
動態數組的創建和初始化
聲明初始化動態數組
ArrayList<type> arr_name = new ArrayList<>();
數組的界限:下標的合法區間[0, size-1]
方法摘要:
boolean |
add(E e) 將指定的元素添加到此列表的尾部。 |
|
void |
add(int index, E element) 將指定的元素插入此列表中的指定位置。 |
|
boolean |
addAll(Collection<? extends E> c) 按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部。 |
|
boolean |
addAll(int index, Collection<? extends E> c) 從指定的位置開始,將指定 collection 中的所有元素插入到此列表中。 |
|
void |
clear() 移除此列表中的所有元素。 |
|
Object |
clone() 返回此 ArrayList 實例的淺表副本。 |
|
boolean |
contains(Object o) 如果此列表中包含指定的元素,則返回 true。 |
|
void |
ensureCapacity(int minCapacity) 如有必要,增加此 ArrayList 實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數。 |
|
E |
get(int index) 返回此列表中指定位置上的元素。 |
|
int |
indexOf(Object o) 返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。 |
|
boolean |
isEmpty() 如果此列表中沒有元素,則返回 true |
|
int |
lastIndexOf(Object o) 返回此列表中最後一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。 |
|
E |
remove(int index) 移除此列表中指定位置上的元素。 |
|
boolean |
remove(Object o) 移除此列表中首次出現的指定元素(如果存在)。 |
|
protected void |
removeRange(int fromIndex, int toIndex) 移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。 |
|
E |
set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。 |
|
int |
size() 返回此列表中的元素數。 |
|
Object[] |
toArray() 按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組。 |
|
|
toArray(T[] a) 按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
|
void |
trimToSize() 將此 ArrayList 實例的容量調整爲列表的當前大小。 |
例題:
數組:力扣-題號-1313-https://leetcode-cn.com/problems/decompress-run-length-encoded-list/submissions/
給你一個以行程長度編碼壓縮的整數列表 nums 。
考慮每對相鄰的兩個元素 [a, b] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一對都表示解壓後有 a 個值爲 b 的元素。
請你返回解壓後的列表。
示例:
輸入:nums = [1,2,3,4]
輸出:[2,4,4,4]
解釋:第一對 [1,2] 代表着 2 的出現頻次爲 1,所以生成數組 [2]。
第二對 [3,4] 代表着 4 的出現頻次爲 3,所以生成數組 [4,4,4]。
最後將它們串聯到一起 [2] + [4,4,4,4] = [2,4,4,4]。
提示:
2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100
(這裏注意下,實際上這種方式很麻煩,只是爲了寫一個數組應用的例子)
class Solution {
public int[] decompressRLElist(int[] nums) {
int size = 0;
for (int i = 0; i < nums.length; i+=2) {
size+=nums[i];
}
int[] res = new int[size];
int pointer = 0;
for (int i = 0; i < res.length; i+=2) {
if(i<nums.length) {
for (int j = 0; j < nums[i]; j++) {
res[pointer] = nums[i+1];
pointer++;
}
}
}
return res;
}
}
動態數組
class Solution {
public int[] decompressRLElist(int[] nums) {
ArrayList<Integer> a = new ArrayList<>();
for (int i = 0; i < nums.length; i+=2) {
for (int j = 0; j < nums[i]; j++) {
a.add(nums[i+1]);
}
}
int[] res = new int[a.size()];
for (int i = 0; i < a.size(); i++) {
res[i] = a.get(i);
}
return res;
}
}