Skip to content

Commit

Permalink
小傅哥,文章代码更新。晚上好!
Browse files Browse the repository at this point in the history
面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》
  • Loading branch information
fuzhengwei committed Aug 28, 2020
1 parent 3d7b3d4 commit 287ab7d
Show file tree
Hide file tree
Showing 7 changed files with 235 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
/interview.iml
/interview-04/interview-04.iml
/interview-07/interview-07.iml
/interview-05/interview-05.iml
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@
4. [面经手册 · 第3篇《HashMap核心知识,扰动函数、负载因子、扩容链表拆分,深度学习》](https://bugstack.cn/interview/2020/08/07/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC3%E7%AF%87-HashMap%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86-%E6%89%B0%E5%8A%A8%E5%87%BD%E6%95%B0-%E8%B4%9F%E8%BD%BD%E5%9B%A0%E5%AD%90-%E6%89%A9%E5%AE%B9%E9%93%BE%E8%A1%A8%E6%8B%86%E5%88%86-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0.html)
5. [面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》](https://bugstack.cn/interview/2020/08/13/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC4%E7%AF%87-HashMap%E6%95%B0%E6%8D%AE%E6%8F%92%E5%85%A5-%E6%9F%A5%E6%89%BE-%E5%88%A0%E9%99%A4-%E9%81%8D%E5%8E%86-%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90.html)
6. [面经手册 · 第5篇《看图说话,讲解2-3平衡树「红黑树的前身」》](https://bugstack.cn/interview/2020/08/16/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC5%E7%AF%87-%E7%9C%8B%E5%9B%BE%E8%AF%B4%E8%AF%9D-%E8%AE%B2%E8%A7%A32-3%E5%B9%B3%E8%A1%A1%E6%A0%91-%E7%BA%A2%E9%BB%91%E6%A0%91%E7%9A%84%E5%89%8D%E8%BA%AB.html)
7 [面经手册 · 第6篇《带着面试题学习红黑树操作原理,解析什么时候染色、怎么进行旋转、与2-3树有什么关联》](https://bugstack.cn/interview/2020/08/20/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC6%E7%AF%87-%E5%B8%A6%E7%9D%80%E9%9D%A2%E8%AF%95%E9%A2%98%E5%AD%A6%E4%B9%A0%E7%BA%A2%E9%BB%91%E6%A0%91%E6%93%8D%E4%BD%9C%E5%8E%9F%E7%90%86-%E8%A7%A3%E6%9E%90%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E6%9F%93%E8%89%B2-%E6%80%8E%E4%B9%88%E8%BF%9B%E8%A1%8C%E6%97%8B%E8%BD%AC-%E4%B8%8E2-3%E6%A0%91%E6%9C%89%E4%BB%80%E4%B9%88%E5%85%B3%E8%81%94.html)
7. [面经手册 · 第6篇《带着面试题学习红黑树操作原理,解析什么时候染色、怎么进行旋转、与2-3树有什么关联》](https://bugstack.cn/interview/2020/08/20/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC6%E7%AF%87-%E5%B8%A6%E7%9D%80%E9%9D%A2%E8%AF%95%E9%A2%98%E5%AD%A6%E4%B9%A0%E7%BA%A2%E9%BB%91%E6%A0%91%E6%93%8D%E4%BD%9C%E5%8E%9F%E7%90%86-%E8%A7%A3%E6%9E%90%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E6%9F%93%E8%89%B2-%E6%80%8E%E4%B9%88%E8%BF%9B%E8%A1%8C%E6%97%8B%E8%BD%AC-%E4%B8%8E2-3%E6%A0%91%E6%9C%89%E4%BB%80%E4%B9%88%E5%85%B3%E8%81%94.html)
8. [面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》](https://bugstack.cn/interview/2020/08/27/%E9%9D%A2%E7%BB%8F%E6%89%8B%E5%86%8C-%E7%AC%AC7%E7%AF%87-ArrayList%E4%B9%9F%E8%BF%99%E4%B9%88%E5%A4%9A%E7%9F%A5%E8%AF%86-%E4%B8%80%E4%B8%AA%E6%8C%87%E5%AE%9A%E4%BD%8D%E7%BD%AE%E6%8F%92%E5%85%A5%E5%B0%B1%E6%8A%8A%E8%B0%A2%E9%A3%9E%E6%9C%BA%E9%9D%A2%E6%99%95%E4%BA%86.html)
2 changes: 2 additions & 0 deletions interview-03/interview-03.iml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.73" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
</component>
</module>
7 changes: 7 additions & 0 deletions interview-05/src/main/java/T.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public class T {
}
15 changes: 15 additions & 0 deletions interview-07/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>interview</artifactId>
<groupId>org.itstack</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>interview-07</artifactId>


</project>
199 changes: 199 additions & 0 deletions interview-07/src/test/java/org/itstack/interview/test/ApiTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
package org.itstack.interview.test;

import com.alibaba.fastjson.JSON;
import org.junit.Test;
import sun.net.idn.Punycode;

import javax.sound.midi.Soundbank;
import java.lang.reflect.Array;
import java.util.*;

public class ApiTest {

public static void main(String[] args) {
List<String> list = new ArrayList<String>(Collections.nCopies(9, "a"));
System.out.println("初始化:" + list);

list.add(2, "b");
System.out.println("插入后:" + list);
}

@Test
public void t2() {
String[] strs = new String[10];
strs[5] = "1";

Arrays.asList();
}

@Test
public void test_remove() {
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");
System.out.println(list);

list.remove(2);

System.out.println(list);
System.out.println(list.size());
}

@Test
public void test_arraycopy() {
int[] oldArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] newArr = new int[oldArr.length + (oldArr.length >> 1)];

System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);

newArr[11] = 11;
newArr[12] = 12;
newArr[13] = 13;
newArr[14] = 14;

System.out.println("数组元素:" + JSON.toJSONString(newArr));
System.out.println("数组长度:" + newArr.length);

/**
* 测试结果
*
* 数组元素:[1,2,3,4,5,6,7,8,9,10,0,11,12,13,14]
* 数组长度:15
*/
}

@Test
public void test_copy_remove() {
int[] oldArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int index = 2;
int numMoved = 10 - index - 1;

System.arraycopy(oldArr, index + 1, oldArr, index, numMoved);

System.out.println("数组元素:" + JSON.toJSONString(oldArr));
}

@Test
public void init_01() {
ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
}

@Test
public void init_02() {

List<String> list = Arrays.asList("aaa", "bbb", "ccc");
list.add("ddd");

ArrayList<String> obj = new ArrayList<String>(Arrays.asList("aaa", "bbb", "ccc"));

}

@Test
public void init_03() {
ArrayList<String> list = new ArrayList<String>() {{
add("aaa");
add("bbb");
add("ccc");
}};
}

@Test
public void init_04() {
ArrayList<Integer> list = new ArrayList<Integer>(Collections.nCopies(10, 0));
}

@Test
public void t() {
List<Integer> list1 = Arrays.asList(1, 2, 3);
System.out.println("通过数组转换:" + (list1.toArray().getClass() == Object[].class));

ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1, 2, 3));
System.out.println("通过集合转换:" + (list2.toArray().getClass() == Object[].class));
}


@Test
public void t_hashIdx() {

List<String> list = new ArrayList<String>(Collections.<String>nCopies(8, "0"));

list.set("a".hashCode() & 8 - 1, "a");
list.set("b".hashCode() & 8 - 1, "b");
list.set("c".hashCode() & 8 - 1, "c");
list.set("d".hashCode() & 8 - 1, "d");
list.set("e".hashCode() & 8 - 1, "e");
list.set("f".hashCode() & 8 - 1, "f");
list.set("g".hashCode() & 8 - 1, "g");

System.out.println("元素集合:" + list);

System.out.println("获取元素f [\"f\".hashCode() & 8 - 1)] Idx:" + ("f".hashCode() & (8 - 1)) + " 元素:" + list.get("f".hashCode() & 8 - 1));
System.out.println("获取元素e [\"e\".hashCode() & 8 - 1)] Idx:" + ("e".hashCode() & (8 - 1)) + " 元素:" + list.get("e".hashCode() & 8 - 1));
System.out.println("获取元素d [\"d\".hashCode() & 8 - 1)] Idx:" + ("d".hashCode() & (8 - 1)) + " 元素:" + list.get("d".hashCode() & 8 - 1));
}

@Test
public void t_ensureCapacity01(){
final int N = 10000000;
ArrayList<Integer> list = new ArrayList<Integer>();
long startTime = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
list.add(i);
}
System.out.println("默认情况耗时:"+(System.currentTimeMillis() - startTime));
}

@Test
public void t_ensureCapacity02(){
final int N = 10000000;
ArrayList<Integer> list = new ArrayList<Integer>(N);
long startTime = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
list.add(i);
}
System.out.println("初始定长容量耗时:"+(System.currentTimeMillis() - startTime));
}

@Test
public void t_ensureCapacity03(){
final int N = 10000000;
ArrayList<Object> list = new ArrayList<Object>();
long startTime = System.currentTimeMillis();
list.ensureCapacity(N);
for (int i = 0; i < N; i++) {
list.add(i);
}
System.out.println("使用ensureCapacity方法耗时:"+(System.currentTimeMillis() - startTime));
}

@Test
public void tt(){
ArrayList<Object> list = new ArrayList<Object>();
final int N = 10000000;
for (int i = 0; i < N; i++) {
list.add(i);
}

ArrayList<Object> list2 = new ArrayList<Object>();
long startTime1 = System.currentTimeMillis();
// list2.ensureCapacity(N);
for (int i = 0; i < N; i++) {
list2.add(i);
}
long endTime1 = System.currentTimeMillis();
System.out.println("使用ensureCapacity方法后:"+(endTime1 - startTime1));
}

}
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<module>interview-03</module>
<module>interview-04</module>
<module>interview-05</module>
<module>interview-07</module>
</modules>

<dependencies>
Expand All @@ -22,6 +23,13 @@
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>

0 comments on commit 287ab7d

Please sign in to comment.