Android基础知识

ps:基础知识薄弱,一问三不知. 遂有此文章 根据问题 结合网上查询到各种大神的解释加上自己的理解来整理一片文章,供加固记忆

1. Array,ArrayList,List

Array :

数组在内存中是连续存储的,所以他的索引速度非常快,而且他的赋值与修改也很简单。但是在声明的时候必须给出数组长度,而且无法动态修改数组的长度

ArrayList

  • ArrayList是实现了基于动态数组的数据结构
  • 快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
  • 向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
  • 操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。
  • 容量随着数据的大小而改变,每次扩充的大小为自身的50% 但是存在不安全类型 与 装箱 拆箱的性能损耗
    因为ArrayList会把所有的数据作为object类型来处理, 所以他允许插入不同类型的数据
    例如:
ArrayList list = new ArrayList();
//新增数据
 list.Add("abc"); list.Add(123);
//修改数据
 list[2] = 345;
//移除数据
 list.RemoveAt(0);
//插入数据 
list.Insert(0, "hello world");

在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

  • 装箱与拆箱的概念
    装箱:将数据类型的值 赋给object 对象o
int i=123; object o=(object)i;

拆箱:object对象o的值赋给int类型的变量i

object o=123; int i=(int)o;

装箱与拆箱的过程是很损耗性能的。

List

正是因为ArrayList存在不安全类型与装箱拆箱的缺点,所以在C#2.0后出现了泛型的概念。而List类是ArrayList类的泛型等效类。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。 比如:

List list = new List();
//新增数据
list.Add(123);
//修改数据 
list[0] = 345;
//移除数据
list.RemoveAt(0);

同时 List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造

List list;     //正确   list=null; 
List list=new List();    //   是错误的用法

List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。 而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。

  • List泛型的好处:
    通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。泛型提供了类型安全但没有增加多个实现的开销。

LinkedList

ArrayList和LinkedList的用法区别:
  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
LinkedList的优缺点:
  • 操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
    不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢

你可能感兴趣的:(Android基础知识)