目前好像写不出比较高质量的随笔,除了多看看别人写的,就是多写,做好自己可以做的

最近听的和看到的最多的一个词就是“勿忘初心”。的确不少人到了一定高度之后,就不知道该怎么做了。(包括我曾经的偶像娜姐,在得到法网冠军之后,有很长一段时间都迷失了)

自己总结一下:人生到了某个层次或高度的时候,应该记得是什么原因让自己可以走到这个高度,而不是觉得自己应该做些什么去适应这个高度。

当然,每个阶段都有每个阶段该做的和能做的事,这里说的是要保持住让自己前进的好品质。

在项目初期出现的问题:

在Java中,List是一个接口,LinkedList继承了抽象类AbstractSequentialList实现了List接口(其中AbstractSequentialList类继承 AbstractList类)

ArrayList、Vector继承AbstractList类,实现了List接口。

AbstractList实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,AbstractList是List接口的最小实现。

(也有人说AbstractList是多余的参考Why does LinkedHashSet<E> extend HashSet<e> and implement Set<E>

扯远了,项目中有地方用到了LinkedList的时候出错。

一、将List赋值给另一个List

         LinkedList<Integer> getData=new LinkedList<Integer>();
LinkedList<Integer> saveData;
//错误一:saveData对象引用getData对象(类似于指针指向A),并不是将getData对象传递给savaData
saveData=getData;
//错误二:浅克隆,依然是同一个对象
saveData=(LinkedList<Integer>) getData.clone(); //正确一
LinkedList<Integer> saveData=new LinkedList<Integer>(getData);
//正确二
LinkedList<Integer> saveData=new LinkedList<Integer> ();
saveData.addAll(getData);
//正确三
for(Integer s:getData)
saveData.add(s);

二、实现在一个List中多线程操作(添加和删除)

由于LinkedList是线程不同步的,所以我选择的办法是给他的添加、删除等操作的模块加锁

关键字synchronized取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁,哪个线程先执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁,其他线程都只能呈等待状态。但是这有个前提:既然锁叫做对象锁,那么势必和对象相关,所以多个线程访问的必须是同一个对象

//代码块一,将含有添加元素的语句放入锁中
synchronized (test.myApp.getFlag()) {//myApp是一个继承Application类的类,getFlag()得到其中定义的一个String对象(字符串常量)
if (Assets2.start == 1) {
float[] i = {event.getAccelerationX(), event.getAccelerationY(), event.getAccelerationZ()};
test.myApp.getAsensorData().addLast(i);
} else test.myApp.getAsensorData().clear();
}
//代码块二,给含删除List中元素的代码块加锁,注意锁与代码块一相同
synchronized (test.myApp.getFlag()) {
if (!test.myApp.getAsensorData().isEmpty() && (!test.myApp.getGsensorData().isEmpty())) {
test.myApp.getAsensorData().removeFirst();
// test.myApp.getGsensorData().removeFirst();
}
}

其中test.myApp.getFlag()只用是一个对象即可,如果是在Java中非安卓中使用:String flag="110";用flag代替test.myApp.getFlag()即可。

test.myApp.getAsensorData()是获取定义为全局变量的LinkedList,在Java中:LinkedList<float[]> asensorData=new LinkedList<>();后用asensorData代替test.myApp.getAsensorData()。

知识补充:vector、LinkedList、ArrayList区别

1.Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。

2.Vector的方法加了synchronized, 而ArrayList、LinkedList则没有。Vector属于线程安全的(也称线程同步)。

3.LinkedList适合指定位置插入、删除操作,不适合查找。()Vector、ArrayList适合查找,不适合指定位置插入、删除。

4.ArrayList在内存不够时默认是扩展50% + 1个。(例如:原始大小是 10 ,扩容后的大小就是 10 + 5+1 = 16);Vector是当增长因子>0,默认扩展增加一个增长因子,否则默认扩展1倍(当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否子新数组长度为原数组长度的2倍。)。linkedList 是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。

添加:HashMap扩容(初始化大小是 16 ,扩容因子默认0.75(可以指定初始化大小,和扩容因子)),当前大小 和 当前容量 的比例超过了 扩容因子,就会扩容,扩容后大小为 一倍。

例如:初始大小为 16 ,扩容因子 0.75 ,当容量为12的时候,比例已经是0.75 。触发扩容,扩容后的大小为 32。

写一篇随笔挺花时间的,有时候写到一半,忘记,下次再打开居然没存,就gg了~希望以后会更熟练吧,希望能锻炼自己的梳理能力,也能温习以前遇到的东西。

List、LinkedList、ArrayList、Vector的更多相关文章

  1. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  2. 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)

    16.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同 ...

  3. Queue 与List、LinkedList与 ArrayList 区别

    List 是一个接口,不能实例化,通过实例化ArrayList 或者LinkedList来调用:List list = new ArrayList(); |--List: 元素是有序的(怎么存的就怎么 ...

  4. linkedlist,arraylist,vector的特点

    LinkedList  基于双向链表实现的列表,Node结构是它的内部类: Linkedlist <E> extends AbstractSequentialList<E> p ...

  5. ArrayList、LinkedList、Vector的区别

    Arraylist和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标, ...

  6. Java ArrayList、Vector和LinkedList等的差别与用法(转)

    Java ArrayList.Vector和LinkedList等的差别与用法(转) ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都 ...

  7. HashMap、HashTable、ArrayList、LinkedList、Vector区别

    HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class Has ...

  8. Java进阶(四十六)简述ArrayList、Vector与LinkedList的异同点

    简述ArrayList.Vector与LinkedList的异同点   Collection类的继承图如下:   从图中可以看出,LinkedList与ArrayList.ArrayDeque这三者都 ...

  9. 数组Array和列表集合ArrayList、LinkedList和Vector的区别

    一.ArrayList和Vector的区别 ArrayList与Vector主要从以下方面来说. 1.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同 ...

  10. 一道关于:ArrayList、Vector、LinkedList的存储性能和特性 的面试题

    ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...

随机推荐

  1. java unsupported major.minor version 51.0 解决

    1.概述 出现如题所述异常 是因为jdk高版本 编译后的class文件 运行在低版本的jre环境下(如jdk7编译 运行在jdk6环境下) 2. 解决方案 在eclipse等ide中重新编译 指定编译 ...

  2. Goodbye Bingshen

    在uoj上打的第二场比赛......还凑合(卧槽C题80分没了QAQ 第一次接触交互题还挺好玩的哈哈 可能是人比较多吧.....rating涨了不少...... 现在我rating正好比lrd高1哈哈 ...

  3. Mybatis学习随笔

    学习Mybatis路径(适合有java基础和mysql基础的小伙伴) 1.把项目搭建起来,跑一跑感受一下 2.测试基本映射 3.测试高级映射 4.测试动态sql 5.学习懒加载与缓存 6.与sprin ...

  4. vue支付密码

    从网上搜索了好多都很麻烦,花了点事件自己做了个,简单轻便,老少皆宜 <template> <section class="pay-mask" @click=&qu ...

  5. js小数乘法精确率问题

    研究拓扑图百分比乘法计算,带小数位计算会出现值溢出的问题 JS里做小数的乘法运算时会出现浮点错误:  结果是251.89999999999998 而不是251.9  这个问题想必有很多人为之头痛. 那 ...

  6. css flexbox 弹性布局

    flexbox 即css flexible box layout. ie9及以下不支持flexbox. flex详细规范(https://www.w3.org/TR/css-flexbox/) 为什么 ...

  7. VMWARE错误-"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常

    异常信息:"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常. 解决方案:以管理员的身份运行客户程序

  8. 九、background及相关所有属性

    先看看如下所示的视效图应该如何显示背景阴影? #header { height: 180px; background: url(../images./bg.png) no-repeat center ...

  9. *p++、*++p、(*p)++区别

    关于数组指针的谜题 假设 p 是指向数组 arr 中第 n 个元素的指针,那么 *p++.*++p.(*p)++ 分别是什么意思呢? *p++ 等价于 *(p++),表示先取得第 n 个元素的值,再将 ...

  10. 面试题Spring Boot

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...