arraylist

wow you can really read source code : List (JDK8) 未完结

有些话、适合烂在心里 提交于 2020-02-03 11:07:55
ArrayList 关于ArrayList ArrayList的长度可变:这里比较的是普通的数组你会发现普通数组没有扩容的方法,ArrayList继承了AbstractList因此继承了添加、删除、修改、遍历等方法并重写了他们。 ArrayList具有随机访问功能:ArrayList实现了RandomAccess接口,但是这个接口并无内容,在自身类内部创建了内部类SubList实现RandomAccess接口并也实现增加删除等方法。 ArrayList 能被克隆:ArrayList实现了Cloneable接口,但是这个接口也无内容,通过重写Object类的clone方法实现。 ArrayList支持序列化:ArrayList实现了Serializable接口,但这个接口仍然是个空接口,对应的是writeObject方法。 *空接口起标识作用,告诉程序实现了它的对象具有某某功能 继承关系图 图源: 参考资料1 通过各IDE查看源码可看到 参考资料: 知乎用户 Lyon 的文章 Java集合—List—继承关系 CSDN用户 Fighter168 的文章 ArrayList源码分析(基于JDK8) 来源: CSDN 作者: I'm bald,I'm better 链接: https://blog.csdn.net/weixin_44090559/article/details

ArrayList 底层实现原理及Vector

坚强是说给别人听的谎言 提交于 2020-02-03 03:58:21
ArrayList 底层实现核心点 1.集合底层使用数组实现的 2.为什么集合能存放无限大小?####数组扩容技术实现的 Arrays.copyOf: 实现数组的复制,返回复制后的数组。参数是被复制的数组和复制的长度。 返回一个新的数组,将原来数组长度2,扩容长度为10的一个新的数组,原来的数据不变。 代码示例实现: package com . mmall . demo2 . demotest ; import java . util . Arrays ; public class Test001 { public static void main ( String [ ] args ) { Object [ ] objects = { 1 , 2 } ; System . out . println ( "原来数组长度" + objects . length ) ; // 返回一个新的数组,将原来数组长度2,扩容长度为10的一个新的数组,原来的数据不变。 Object [ ] objects2 = Arrays . copyOf ( objects , 10 ) ; System . out . println ( "新数组的长度" + objects2 . length ) ; } } 运行结果: System.arraycopy方法: 如果是数组比较大,那么使用System

day07_Scanner类、Random类、ArrayList 类

自作多情 提交于 2020-02-03 00:31:39
API 概述 API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 打开帮助文档。 点击显示,找到索引,看到输入框。 你要找谁?在输入框里输入,然后回车。 看包。java.lang下的类不需要导包,其他需要。 看类的解释和说明。 学习构造方法。 使用成员 。 引用类型使用步骤 类属于引用类型的一种,所以符合引用类型的使用步骤 1:导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格式: 2:创建对象 使用该类的构造方法,创建一个该类的对象。 格式: 3:调用方法 调用该类的成员方法,完成指定功能。 格式: int i = sc.nextInt(); // 接收一个键盘录入的整数 Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。Scanner类的功能:可以实现键盘输入数据,到程序当中。 Scanner使用步骤 查看类 java.util.Scanner :该类需要import导入后使用。

35个Java代码优化的细节,你知道几个

倾然丶 夕夏残阳落幕 提交于 2020-02-02 23:28:07
目录 前言 代码优化细节 1、尽量指定类、方法的final修饰符 2、尽量重用对象 3、尽可能使用局部变量 4、及时关闭流 5、尽量减少对变量的重复计算 6、尽量采用懒加载的策略,即在需要的时候才创建 7、慎用异常 8、不要在循环中使用 try…catch… ,应该把其放在最外层 9、如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度 10、当复制大量数据时,使用 System.arraycopy() 命令 12、循环内不要不断创建对象引用 13、基于效率和类型检查的考虑,应该尽可能使用 array ,无法确定数组大小时才使用 ArrayList 14、尽量使用 HashMap 、 ArrayList 、 StringBuilder ,除非线程安全需要,否则不推荐使用 Hashtable 、 Vector 、 StringBuffer ,后三者由于使用 同步机制 而导致了 性能开销 15、不要将数组声明为 public static final 16、尽量在合适的场合使用单例 17、尽量避免随意使用静态变量 18、及时清除不再需要的会话 19、实现 RandomAccess 接口的集合比如 ArrayList ,应当使用最普通的for循环而不是 foreach 循环来遍历 20、使用同步代码块替代同步方法 21、将常量声明为 static final

C#中泛型效率对比(ArrayList和List)

心不动则不痛 提交于 2020-02-02 04:12:31
泛型一般效率比较高,因为它的操作并不是装箱拆箱,也不涉及object类型转换。 下面的一段程序主要测试泛型列表List与数组列表ArayList之间的性能对比。这两种都可以创建列表,且都可以面对不同的数据类型。泛型的数据类型编程中指定。ArrayList类型为object类,会进行数据的装箱和拆箱。 using System ; using System . Collections . Generic ; //使用泛型类必须引用空间 using System . Linq ; using System . Text ; using System . Text . RegularExpressions ; using System . Threading . Tasks ; using System . Collections ; using System . Diagnostics ; //使用时间计时必须引用此空间 namespace TESTT { class Program { public static void TestNonGeneric ( ) { Stopwatch sw = new Stopwatch ( ) ; //计时器 List < int > list = new List < int > ( ) ; //声明List泛型对象,类型为int sw .

【Java 常用类】java.util包(3)ArrayList、Vector的常用方法

纵然是瞬间 提交于 2020-02-02 01:00:23
文章目录 前言 一、ArrayList 二、使用 1.构造器 2.常用方法 2.1 添加 + 获取 + 移除 2.2 获取元素个数 2.3 是否为空 2.4 是否包含 2.5 查找 2.5 替换 最后 相关 前言 ArrayList 和 Vector 的用法是一样的,都是可变大小的数组。 区别: 线程安全:ArrayList 是线程不安全的,Vector 线程安全 速度:ArrayList 效率更高,Vector 因为是线程安全的,所以效率比ArrayList低。 如果你需要线程安全的ArrayList,不要使用Vector(不如后面一个好),请使用JUC包下的CopyOnWriteArrayList类吧。 一、ArrayList List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。) public class ArrayList < E > extends AbstractList < E > implements List < E > , RandomAccess , Cloneable , Serializable 二、使用 1.构造器 创建一个默认的容量(默认容量为10)的ArrayList

[Java学习笔记] Java核心技术 卷1 第五章 继承

拥有回忆 提交于 2020-02-01 17:11:46
第5章 继承 利用继承,可以基于已存在的类构造一个新类。继承已存在的类就是复用(继承)这些类的方法和域。还可以在此基础上添加新的方法和域。 反射。 5.1 超类子类 使用extends构造一个派生类 class Manager extends Employee { 添加方法和域 覆盖:重写一些基类中不适合派生类的方法 } 所有的继承都是公有继承。即所有的公有成员和保护成员都保持原来的状态,基类的私有成员仍然是私有的。不能被派生类的成员访问。 (C++中私有继承或保护继承会将 公有成员和保护成员都变成派生类的私有成员或保护成员) 基类、父类、超类:被继承的类 派生类、孩子累、子类:新的类 使用super调用基类被覆盖的方法。super与this不同,仅是用来指示编译器调用超类方法的特殊关键字。 使用super调用基类的构造器 super(参数列表..);由于派生类不能调用基类的私有域,所有需要调用构造器对私有域初始化。 如果派生类没有显示调用超类构造器,则自动调用基类默认的构造器。如果超类没有不带参数的构造器又没有显式的调用超类的其他构造器,则Java编译器将报错。 class Employee { private double salary; public double getSalary(){...} public Employee(double x){...} } class

C#调用python脚本

心已入冬 提交于 2020-02-01 12:51:20
只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对的是python脚本中包含第三方模块的情况。不管哪种方式,首先都需要安装IronPython。可以在官网下载安装包自行安装后添加引用即可。 C#代码 using IronPython.Hosting; using Microsoft.Scripting.Hosting; using System; namespace CSharpCallPython { class Program { static void Main(string[] args) { ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象 dynamic py = pyEngine.ExecuteFile(@"test.py");//读取脚本文件 int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 }; string reStr = py.main(array);//调用脚本文件中对应的函数 Console.WriteLine(reStr); Console.ReadKey(); } } } python代码 def main(arr): try: arr = set(arr) arr = sorted

Remove items from ArrayList with certain value

亡梦爱人 提交于 2020-02-01 10:26:09
问题 I have created a list of objects and have people added to it: ArrayList<Person> peeps = new ArrayList<Person>(); peeps.add(new Person("112", "John", "Smith")); peeps.add(new Person("516", "Jane", "Smith")); peeps.add(new Person("114", "John", "Doe")); I am trying to figure out how to remove the person from the list by ID number. So if I wanted to remove the person with the ID number 114 but didn't now where it fell in the list, how would I? 回答1: If you are going to be using an ArrayList, the

Remove items from ArrayList with certain value

本秂侑毒 提交于 2020-02-01 10:25:35
问题 I have created a list of objects and have people added to it: ArrayList<Person> peeps = new ArrayList<Person>(); peeps.add(new Person("112", "John", "Smith")); peeps.add(new Person("516", "Jane", "Smith")); peeps.add(new Person("114", "John", "Doe")); I am trying to figure out how to remove the person from the list by ID number. So if I wanted to remove the person with the ID number 114 but didn't now where it fell in the list, how would I? 回答1: If you are going to be using an ArrayList, the