Day01Java-API-List

1. 以下代码用于测试List的基本方法 add\get\size\contains等
List<String> list = new ArrayList<String>();
list.add("java"); // 向集合追加元素
list.add(2, "hadoop"); // 向集合插入元素
System.out.println(list.get(2)); // 根据下标取出元素
System.out.println(list.size()); // 集合中元素的个数
list.remove(2); // 根据下标删除某一个元素
list.contains("java"); //true 看集合中是否包含某一个对象,使用equals比较
list.contains(new String("ibm")); //true
equals与==区别:
1.==是比较对象的地址值,即判断是否是同一个对象
2.equals可以重写,这里比较的是内容是否相同
3.equals在Object中,比较的是是否为同一对象,与==相同

2. 以下代码演示泛型在集合中的应用
集合中放的是Object类型的引用,为的是什么都可以装——放易取难、不同数据类型的混装
<Stirng> 泛型
List<String> list2 = new ArrayList<String>();
list2.add("abc");
String str = list2.get(0);
System.out.println(str);

3. List和数组直接的转换
浅复制:复制引用,用同一个对象
深复制:复制对象、引用

List<Point> list3 = new ArrayList<Point>();
list3.add(new Point(1, 2));
Point[] points = list3.toArray(new Point[] {});//List.toArray()缺点:浅复制
points[0].setX(100);
System.out.println(list3.get(0).getX());//100

//深复制方法
Point[] points = new Point[list3.size()];
for (int i = 0; i < points.length; i++) {
Point point = list3.get(i);
points[i] = new Point(point.getX(),point.getY());
}

Point[] points1 = { new Point(1, 2), new Point(3, 4), new Point(5, 6) };
List<Point> list4 = new ArrayList<Point>();
list4.addAll(Arrays.asList(points1));//List.aslist(数组),出来List,但该List不能改动即add、remov不能用。
list4.get(0).setX(1000);
System.out.println(points1[0].getX());//1000

Wrapper(包装模式):设计思想
1.建立新类;
2.将原有的类嵌入新建的类中;
3.修改特定的几种方法;
eg:包装List,产生asList
public class MyArrays {
public List asList(Point[] points) {
List list = new ArrayList();
for (int i = 0; i < points.length; i++) {
list.add(points[i]);
}
return new ArrayListWrapper(list);
}
}

class ArrayListWrapper implements List {
private List list;
//原有方法不变
ArrayListWrapper(List list) {
this.list = list;
}
public int size() {
return list.size();
}
....
//修改方法
public boolean add(Point e) {
throw new UnsupportedOperationException("...");//抛出异常
}
public boolean remove(Object o) {
throw new UnsupportedOperationException("...");//抛出异常
}
}

4. 一些高级的API
list.subList(2, 5);//子序列与原数列占有相同的空间
//对子序列的改变会影响到原序列,
//一组下标[2,5)(前面包括,后面不包括)
list.set(0, "X");//有返回值,是被替换的元素
List.get()有返回值,是读取的元素
list.set(0, list5.set(2, list5.get(0))); // 实现元素的交换

5. Collections的一些相关方法
Collections.shuffle(list); // 随机打乱
Collections.sort(list); // 排序
Collections.binarySearch();//折半查找,必须是有序列,返回值为查找的字符
//若返回小于零,则查找没有结果

工具类
Math
Arrays
Collections
...
不能产生对象,是静态方法
面向对象的方法与对象状态有关
只与参数有关的方法,放一起,建工具类

6. ArrayList和LinkedList
ArrayList 靠动态数组实现List,内存连续,
优缺:删除、插入效率低,适合随机查找
LinkedList 靠双向列表实现List,内存可以不连续
优缺:(与上相反)

他们都是List(线性表)的实现类,数据量小时,无差别

程序性能低问题:访问文件、数据库访问、网络传输问题

Deque 双向队列 包含栈、队的性质,但建议使用时,只用其一种功能
实现类:LinkedList
队:先进先出
queue.offer() 入队
queue.poll() 出队
queue.peek() 看下一个元素,但不会导致下一个元素出队
栈:先进后出
queue.push() 入栈
queue.pop() 出栈
queue.peek() 看下一个元素,但不会导致下一个元素出栈

7. Comparable, Comparator
Comparable 用于定义默认的排序逻辑:数字顺序、字典顺序、点的比较
Comparator 用于自定义排序逻辑

比较结果:
第一个大于第二个:返回整数
第一个等于第二个:返回0
第一个小于第二个:返回负数

Callback 回调思想(与Compartor相似)
eg:查找符合条件的学生
public class lx002 {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student("a",80));
list.add(new Student("b",70));
list.add(new Student("c",90));
list.add(new Student("d",78));
List<Student> l=choose(list,new Stuf(){//内部类
public boolean accept(Student stu){
if(stu.getScose()>=80)
return true;
return false;
}});
System.out.println(l);
}

//选择方法
public static List<Student> choose(List<Student> list,Stuf sf){
List<Student> list1=new ArrayList<Student>();
for(int i=0;i<list.size();i++){
Student stu=list.get(i);
if(sf.accept(stu)){
list1.add(stu);
}
}
return list1;
}
}

//接口
interface Stuf{
public boolean accept(Student stu);
}

//学生
class Student{
String string;
int scose;
public Student(String string, int scose){
this.string=string;
this.scose=scose;
}
public int getScose() {
return scose;
}
public String toString(){
return string+" "+scose;
}

}

8
测试ArrayList、Linkedlist的查询性能

ArrayList的算法已经固定
性能要求高时,尽量用数组,算法自己写

UUID产生一个永远不重复的字符串
UUID.randomUUIID().toString();

使用建议:
频繁的首尾查找、删除:使用LinkedList
频繁的查找、删除:使用ArrayList
综合性能使用ArrayList

LinkedList不擅长中部查找删除,但首尾查找比ArrayList快
ArrayList 首、中、尾部查、删性能相差不多

转载于:https://www.cnblogs.com/wangye5633/p/5648980.html

LinkedList和 ArrayList的大数据面试资料(面试题)相关推荐

  1. 大数据面试3分钟自我介绍_大数据面试要注意哪些方面?大数据面试准备三大攻略...

    大数据面试要注意哪些方面?一般来说,求职者要做好自我介绍.面试提问和专业考题三大方面的准备.下面是小编专门为大数据求职者整理的面试攻略,希望对大家找工作有所帮助. 一.大数据面试的自我介绍. 面试一开 ...

  2. 大数据面试(java)题库汇总

    文章目录 大数据面试 1. HDFS读写流程? 1.1 HDFS写流程 1.2 HDFS读流程 2 HDFS HA 架构 3 小文件给hadoop带来的瓶劲问题 3.1 造成问题 3.2 IO问题,性 ...

  3. 大数据面试之新浪面试题

    大数据面试之新浪面试题 学长1 一面 1)自我介绍 叫什么名字,来自哪里,本科哪个学校,硕士哪个学校,大数据做了多长时间,对Hadoop生态圈以及Spark生态圈中的哪些技术比较了解(很简单的一句就带 ...

  4. 2021超全大数据面试宝典,吐血总结十万字,大数据面试收藏这一篇就够了

    本文最新版已发布至公众号[五分钟学大数据] 获取此套面试题最新pdf版,请搜索公众号[五分钟学大数据],对话框发送 面试宝典 扫码获取最新PDF版: 版本 时间 描述 V1.0 2020-02-18 ...

  5. 大数据面试重点之kafka(六)

    大数据面试重点之kafka(六) Kafka分区分配算法 可回答:Kafka的partition分区策略问过的一些公司:阿里云,小米参考答案: 1.生产者分区分配策略 生产者在将消息发送到某个Topi ...

  6. 大数据面试吹牛草稿V2.0

    面试吹牛之前先打个草稿! 本文首发于微信公众号[五分钟学大数据],公众号上有很多大数据学习方法,学习文档,最全的大数据面试八股文等 各位面试官好! 1. 我叫 xxx,毕业于 xxx,之前在 xxx ...

  7. 免费分享!最新的大数据学习资料与电子书!!

    很多转行学习大数据的同学时常会发现,自己学习的是一套东西,到大公司面试时将的又是另一套东西. 其实,归根结底,还是本人缺少真正的实战经验,这里整理了一份系统化学习的大数据思维导图(完整版文末领取),大 ...

  8. 干货|50个大数据面试问题及答案第二篇:10个大数据面试中级问题

    上一篇文章我们总结了10个大数据面试入门级问题,大家是否有收获,如果还没有看的小伙伴,可以直接跳转<干货|50个大数据面试问题及答案第一篇:10个大数据面试入门级问题>开始学习吧! 本次我 ...

  9. 免费的大数据学习资料,这一份就足够

      朋友不在于多,知心就好;资料不在于多,精致就好.一份专业的大数据学习资料才是学习大数据的利刃.小编分享的这套大数据学习资料将从学习大纲.书籍.视频教程分别分享. 在这里还是要推荐下我自己建的大数据 ...

最新文章

  1. 自古帝王多短命,假如皇帝也懂负载均衡算法...
  2. php根据IP地址跳转对应的城市,淘宝REST api调用地址直接使用
  3. 总结:详细讲解MapReduce过程(整理补充)
  4. php提交后清楚表单缓存,PHP提交表单后如何控制缓存 | 学步园
  5. 从Delegate.CreateDelegate看值类型的实例方法
  6. 【并查集】家族 (ssl 1896)
  7. axure 内部框架内容下滑_Axure教程:转盘抽奖交互原型
  8. python报错怎么看_python中的错误如何查看
  9. 【BZOJ1854】【codevs3358】游戏,二分图最大匹配
  10. redis 包之间关系
  11. android提示用户去开启gps,在不使用GPS或互联网的情况下获取Android中用户的当前位置...
  12. 中学《教育知识与能力》复习笔记-教资复习全靠它~背诵资料
  13. 交通流理论1——发展阶段
  14. Linux ext2, ext3, ext4 文件系统解读[4]
  15. GUI制作信号分析的频域和时域分析
  16. Multi-armed Bandits(多臂老虎机问题)
  17. docker 常用命令合集
  18. 南开hpd openbilibili
  19. PHPWIND7.3.2设置伪静态方法
  20. html css做一个简历表,HTML table制做我的简历

热门文章

  1. AT2 Homeomorphism and the group structure on a circle
  2. NCFM识别-Googlenet
  3. softmax多分类
  4. php bc 比较,php BC高精确度函数库
  5. catia钣金根据线段折弯_SolidWorks钣金折弯边角余料处理技巧,钣金工艺设计师都在用...
  6. java生僻字_Android上显示生僻字的方法
  7. python最优调配问题_Python实现的基于优先等级分配糖果问题算法示例
  8. qt获取cpu使用率_又一次生产 CPU 高负载排查实践
  9. 含有百分数的简便运算_青岛版三年级上册数学6.1不含括号的混合运算(一)微课知识点精讲+练习...
  10. 分治,递归,贪心算法,动态规划的关系