>

美洲杯在线投注_2019美洲杯外围投注[投注官网]

热门关键词: 美洲杯在线投注,2019美洲杯外围投注[投注官网]

List、LinkedList、篮球世界杯在线投注ArrayList、Ve

- 编辑:美洲杯在线投注 -

List、LinkedList、篮球世界杯在线投注ArrayList、Ve

List、LinkedList、ArrayList、Vector,

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

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

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

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

在项目初期出现的问题:

在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

 1         LinkedList<Integer> getData=new LinkedList<Integer>();
 2         LinkedList<Integer> saveData;
 3         //错误一:saveData对象引用getData对象(类似于指针指向A),并不是将getData对象传递给savaData
 4         saveData=getData;
 5         //错误二:浅克隆,依然是同一个对象
 6         saveData=(LinkedList<Integer>) getData.clone();
 7         
 8         //正确一
 9         LinkedList<Integer> saveData=new LinkedList<Integer>(getData);
10         //正确二
11         LinkedList<Integer> saveData=new LinkedList<Integer> ();
12         saveData.addAll(getData);
13         //正确三
14         for(Integer s:getData)
15             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了~希望以后会更熟练吧,希望能锻炼自己的梳理能力,也能温习以前遇到的东西。

 

http://www.bkjia.com/Javabc/1295732.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1295732.htmlTechArticleList、LinkedList、ArrayList、Vector, 目前好像写不出比较高质量的随笔,除了多看看别人写的,就是多写,做好自己可以做的 最近听的和看到的...

1、ArrayList简单介绍

ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。
ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
和Vector不同,ArrayList中的操作不是线程安全的。所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

2、ArrayList继承AbstractList抽象类,实现List接口

public class ArrayList<E> extends AbstractList<E>  implements List<E>。

3、ArrayList的构造方法

(1)指定容器的构造方法,实例化ArrayList类的时候,会生成一个指定大小的数组

public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: " initialCapacity);
this.elementData = (E[])new Object[initialCapacity];
}

 

(2)默认构造方法

public ArrayList() {
this(10);
}

(3)造一个与指定集合内容相同的ArrayList

public ArrayList(Collection<? extends E> c) {
size = c.size();
// Allow 10% room for growth
int capacity = (int) Math.min((size*110L)/100, Integer.MAX_VALUE);
elementData = (E[]) c.toArray(new Object[capacity]);
}

本文由计算机教程发布,转载请注明来源:List、LinkedList、篮球世界杯在线投注ArrayList、Ve