arraylist

java集合讲解

痴心易碎 提交于 2019-12-17 00:49:46
java集合讲解 1.概述 集合类的顶级接口是Iterable ,Collection 继承了Iterable接口 常用的集合主要有 3 类,Set,List,Queue,他们都是接口,都继于Collection Set下的实现类有HashSet,LinkedHashSet,TreeSet等 List下的实现类主要有ArrayList,Vector,LinkedList Queue基本上是一个先入先出(FIFO)数据结构的队列 集合类名 数据结构 特点 ArrayList 数组 查询快,增删慢,线程不安全,但效率较Vector高 Vector 数组 查询快,增删慢,线程安全,但效率相对较低 LinkedList 双向链表 查询慢,增删快,线程不安全,效率高 HashSet 哈希表 集合内数据不重复,依赖hashCode()和equals()方法,但元素乱序 LinkedHashSet 链表与哈希表 数据不重复,保证遍历顺序为插入顺序(区分:不是排序) TreeSet 红黑树 数据不重复且有序,支持自然排序和自定义排序(Comparable接口) 2.List ArrayList和Vector内部都采用数组实现,不指定大小的情况下,默认容量10,数组的特点,查询(根据索引访问)直接寻址,所以查询的效率非常高 ArrayList与Vector的实现基本一样

When to use a linked list over an array/array list?

假装没事ソ 提交于 2019-12-16 22:35:10
问题 I use a lot of lists and arrays but I have yet to come across a scenario in which the array list couldn't be used just as easily as, if not easier than, the linked list. I was hoping someone could give me some examples of when the linked list is notably better. 回答1: Linked lists are preferable over arrays when: you need constant-time insertions/deletions from the list (such as in real-time computing where time predictability is absolutely critical) you don't know how many items will be in the

把数组排成最小的数

一世执手 提交于 2019-12-16 22:28:51
输入一个正整数 数组 ,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题: 将各个元素从小到大进行排序,排序之后再把他们串联起来就可以了,全排列时间复杂度为O(n!)。要定义一个比较大小的函数,对拼接后的字符串进行比较。比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面。想到了贪心的思想,既然整个序列是最小的,那么越靠前的序列肯定也是最小的,任何两个序列的组合也是较小的。同时将两个字符串按不同顺序相加得到的长度总是相等的,此时就可以简单地使用 compareTo 的方法来做比较。 Comparator接口,两个对象要使用compareTo方法比较大小,就必须实现Comparator接口的compare方法,比如String就实现了这个方法,所以可以直接使用compareTo进行比较。sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序。 public String PrintMinNumber(int [] numbers) { ArrayList<String> arrayList = new ArrayList

ArrayList是非线程安全的,但是为什么是非线程安全的呢?

爱⌒轻易说出口 提交于 2019-12-16 22:27:18
自己通过学习ArrayList的源码,谈一下自己的感悟,不足之处,望多加指出,运维出身自学Java。 ArrayList源码中的属性 //默认容量 private static final int DEFAULT_CAPACITY = 10 ; //空数组,如果传入的容量为0时使用 private static final Object [ ] EMPTY_ELEMENTDATA = { } ; //空数组,传入容量时使用,添加第一个元素的时候会重新初始为默认容量大小 private static final Object [ ] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = { } ; //存储元素的数组 transient Object [ ] elementData ; //集合中元素的个数 private int size ; add操作的源码 public boolean add ( E e ) { //检查是否需要扩容 ensureCapacityInternal ( size + 1 ) ; //把元素插到最后一位 elementData [ size ++ ] = e ; return true ; } private void ensureCapacityInternal ( int minCapacity ) {

集合

帅比萌擦擦* 提交于 2019-12-16 20:15:10
集合 集合ArrayList 可以添加重复数据 ArrayList <e> list = new ArrayList <e> (); e:表示泛型----什么数据类型, 如果是基本数据类型就用包装类 如果不加 <e> ,那么集合可以同时存放基本数据类型和String类型 集合长度 size()方法,获取集合长度. 集合增加 add(Object obj);方法给集合添加数据, add(int index, Object obj);在指定下标index位置处添加obj数据; 1.index不能超出原来集合长度 2.如果下标index的位置上有值,就会把下标和之后的值往后移,把数据添加到下标index位置上. 集合删除 remove(Object obj)方法 集合删除 如果obj数据不是 int类型和char类型 ,就查找第一个然后把它删除 如果obj是 int类型和char类型 ,就会默认为是下标,找到对应下标的值删除 int类型和char类型 要删除的话,必须使用对应的封装包. int -----Integer. char -----Charatcer. 集合修改 set(int index, Object obj)方法,下标index 新的值obj 集合查找 indexOf ();方法,放回数据第一次找到的下标,没有放回-1 LastIndexOf();反向查找对应数据的下标

Java: How to read a text file

左心房为你撑大大i 提交于 2019-12-16 19:46:53
问题 I want to read a text file containing space separated values. Values are integers. How can I read it and put it in an array list? Here is an example of contents of the text file: 1 62 4 55 5 6 77 I want to have it in an arraylist as [1, 62, 4, 55, 5, 6, 77] . How can I do it in Java? 回答1: You can use Files#readAllLines() to get all lines of a text file into a List<String> . for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) { // ... } Tutorial: Basic I/O > File I/O >

Save ArrayList to SharedPreferences

北城余情 提交于 2019-12-16 18:16:44
问题 I have an ArrayList with custom objects. Each custom object contains a variety of strings and numbers. I need the array to stick around even if the user leaves the activity and then wants to come back at a later time, however I don't need the array available after the application has been closed completely. I save a lot of other objects this way by using the SharedPreferences but I can't figure out how to save my entire array this way. Is this possible? Maybe SharedPreferences isn't the way

java容器集合类

天涯浪子 提交于 2019-12-16 15:01:36
容器就是容纳物品,放置物品的东西,对Java来说,一切皆是对象,他的容器就是能保存java的对象的类。由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询、遍历、修改等基本接口功能。 早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。 为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。 java容器是javaAPI所提供的一系列类的实例,用于在程序中存放对象,主要位于Java.util包中,其长度不受限制,类型不受限制,你在存放String类的时候依然能够存放Integer类,两者不会冲突。 Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 List接口 List是有序的Collection(线型存储),使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引

Java集合框架常见面试题

给你一囗甜甜゛ 提交于 2019-12-16 14:56:15
点击关注 公众号 及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 剖析面试最常见问题之Java基础知识 说说List,Set,Map三者的区别? Arraylist 与 LinkedList 区别? 补充内容:RandomAccess接口 补充内容:双向链表和双向循环链表 ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢? 说一说 ArrayList 的扩容机制吧 HashMap 和 Hashtable 的区别 HashMap 和 HashSet区别 HashSet如何检查重复 HashMap的底层实现 JDK1.8之前 JDK1.8之后 HashMap 的长度为什么是2的幂次方 HashMap 多线程操作导致死循环问题 ConcurrentHashMap 和 Hashtable 的区别 ConcurrentHashMap线程安全的具体实现方式/底层具体实现 JDK1.7(上面有示意图) JDK1.8 (上面有示意图) comparable 和 Comparator的区别 Comparator定制排序 重写compareTo方法实现按年龄来排序 集合框架底层数据结构总结 Collection 1. List 2. Set Map 如何选用集合? 剖析面试最常见问题之Java基础知识

80道最新java基础部分面试题(六)

三世轮回 提交于 2019-12-16 11:39:04
59、ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。 接着才说ArrayList与Vector的区别,这主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。 备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的