README.md 1.9 KB
Newer Older
R
renfufei 已提交
1 2
# 数据结构与集合

R
部分  
renfufei 已提交
3
数据结构与算法是编程人员必须掌握的技能。
R
renfufei 已提交
4 5 6

## 对象与封装

R
部分  
renfufei 已提交
7 8 9 10 11 12 13 14 15 16 17 18
一个对象,可以认为是一组数据。 例如:

```json
{
  "id": "tiemao",
  "name" : "铁锚",
  "url" : "https://renfufei.blog.csdn.net/"
}
```

当然,在面向对象程序设计时,一般将数据与对应的操作封装在一起,以保证“区域自治”,最终各种对象就能有序地结合在一起。

R
renfufei 已提交
19 20 21

## 数组

R
部分  
renfufei 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
数组是最简单也最常见的数据结构。

例如以下代码返回一个简单的 int 数组:

```java
public static int[] demoArray(int len) {
    int[] demoArray = new int[len];
    for (int i = 0; i < demoArray.length; i++) {
        demoArray[i] = i * 11;
    }
    System.out.println(demoArray); // [I@1d057a39
    System.out.println(demoArray.getClass()); // class [I
    return demoArray;
}
```

从中可以发现, 数组是一种特殊的对象类型。 `[I` 就是 `int[]` 对应的类名称。

如果元素类型换一个呢?

```java
public static Integer[] demoIntegerArray(int len) {
    Integer[] demoArray = new Integer[len];
    for (int i = 0; i < demoArray.length; i++) {
        demoArray[i] = i * 11;
    }
    // [Ljava.lang.Integer;@26be92ad
    System.out.println(demoArray);
    // class [Ljava.lang.Integer;
    System.out.println(demoArray.getClass());
    return demoArray;
}
```

虽然 `Object` 是所有对象类型的超类, 但数组类型并不能强转?

```java
private void testCast(Integer[] demoIntegerArray) {
    Object[] objArray = (Object[])demoIntegerArray;
    // class [Ljava.lang.Integer;
    System.out.println(objArray.getClass());
    // [Ljava.lang.Integer;@26be92ad
    System.out.println(objArray);
}
```

R
renfufei 已提交
68 69 70

## List

R
部分  
renfufei 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83
List就是列表,和Array很相似,但封装了一些更容易使用的操作。

```java

```




new ArrayList();
Arrays.asList();
Collections.emptyList();

R
renfufei 已提交
84 85 86 87

## Map


R
部分  
renfufei 已提交
88 89 90 91

红黑树


R
renfufei 已提交
92 93 94 95
## Set


## Guava