arraylist

从尾到头打印链表

允我心安 提交于 2020-04-07 01:40:43
题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 解答: /** * public class ListNode { * int val; * ListNode next = null; * <p> * ListNode(int val) { * this.val = val; * } * } */ import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arrayList = new ArrayList<Integer>(); Stack<Integer> stack = new Stack<Integer>(); int element = 0; // 入栈 while (listNode != null) {/*链表不为空:listNode != null*/ stack.push(listNode.val); listNode = listNode.next; } // 出栈 while (!stack.isEmpty()) {/*栈不为空:stack.isEmpty()*/

学习Java的微项目之 斗地主

荒凉一梦 提交于 2020-04-06 23:53:07
这是学习Java的最后一个微项目了,以后就转测试了,姑且记录一下。 斗地主的项目有含金量的点在于其使用对3取余给三个人顺序发牌,并且采用shuffle的静态方法对list进行了打乱。代码如下: import java.util.ArrayList; import java.util.Collections; /** * Created by 123 on 2020.3.23. */ public class DouDiZhu { public static void main(String[] args) { ArrayList<String> poker=new ArrayList<>(); String[] colors={"♥","♣","♠","♦"}; String[] numbers={"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; poker.add("大王"); poker.add("小王"); for (String color : colors) { for (String number : numbers) { poker.add(color+number); } } Collections.shuffle(poker); ArrayList<String> player1=new

Java集合<4> (List)

冷暖自知 提交于 2020-04-06 19:48:26
List的实现类 接口java.util.List是java.util.Collection接口的一个子接口,它代表一个有序的对象列表。 这个意味着你可以通过一个特定的顺序访问集合中的元素。并且你可以向List中添加重复的元素。 List的实现类: java.util.ArrayList (基于数组,优势在于随机访问某个元素进行查询或更新上) java.util.LinkedList (基于链表,优势在于针对指针元素位置进行插入或茶山操作上) java.util.Vector (同ArrayList实现基本一致,但Vector是线程安全的) java.util.Stack (java中栈的实现,特点:后进先出) 添加和访问元素 在List中添加元素调用add()方法即可,该方法继承与Collection接口。 List list = new ArrayList(); // add方法默认将添加的元素放置数组末尾 list.add("element1"); list.add("element2"); list.add("element3"); // add方法还可以通过制定索引将元素放置指定位置 // 在该位置和之后的元素需要将索引往后推一位 // 即原来index=0,index=1的现在为index=1,index=2 list.add(0,"element0");

java 集合类

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-04 19:29:48
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 Collection的子类对象ArrayList演示Collection的使用。 添加元素: ArrayList arrayList = new ArrayList(); //添加元素 arrayList.add("java01"); arrayList.add("java02"); arrayList.add("java03"); arrayList.add("java04"); //获取长度 System.out.println("size:" + arrayList.size()); add方法的参数类型Object,以便于接收 任意类型的对象 集合中存储的都是对象的引用 打印集合: System.out.println(arrayList);//[java01, java02, java03, java04 删除元素: System.out.println("size:" + arrayList.size()); System.out.println(arrayList);//[java01, java02, java03, java04] arrayList.remove("java03"); System.out.println(arrayList);//[java01, java02, java04]

硬核ArrayList源码分析,答应我每天看一遍好么

耗尽温柔 提交于 2020-04-04 19:03:20
一 前言 知识追寻者目前的系列都是基于jdk1.8进行学习分析;本篇源码分析会进行每步分析,当所有方法分析完最后还会做个大总结;如果不爱看源码分析步骤,只要面试最终结论的读者可以看看文末的总结就行了; 知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;) 二 ArrayList源码分析 2.2 空参构造方法源码分析 调试代码 public static void main(String[] args) { // 初始化长度为0 ArrayList list = new ArrayList();//断点 } 首先刚刚开始调到断点时,会默认显示ArrayList初始化长度为0; 其次进入构造方法 public ArrayList() { // elementData 是 Object[] ---> 故 Arraylist底层由对象数组实现 this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 可以看出就是一个DEFAULTCAPACITY_EMPTY_ELEMENTDATA 赋值给 elementData ; 先看看什么是DEFAULTCAPACITY_EMPTY_ELEMENTDATA,源码如下

[leetcode]_Path Sum I && II

杀马特。学长 韩版系。学妹 提交于 2020-04-03 14:26:52
都是考查DFS。经典回溯算法,问题在于我对该类型的代码不熟悉,目前以参考别人的代码,然后加上自己的实现为主,通过类似的题目加强理解。 一、给定一棵二叉树,判断是否存在从root到leaf的路径和等于给定值sum,存在返回true,否则返回false。 思路:DFS。 代码: 1 private boolean ifExist = false; 2 public boolean hasPathSum(TreeNode root, int sum) { 3 dfs(root , sum , 0); 4 return ifExist; 5 } 6 public void dfs(TreeNode node , int sum , int tempSum){ 7 if(node == null) return; 8 9 tempSum += node.val; 10 if(node.left == null && node.right == null && tempSum == sum){ 11 ifExist = true; 12 return; 13 } 14 dfs(node.left , sum , tempSum); 15 dfs(node.right , sum , tempSum); 16 17 } 网络上的DFS代码写的很流畅:参考一下,希望以后能写出这么流畅、舒服的代码。

Java集合(2)一 ArrayList 与 LinkList

梦想与她 提交于 2020-03-31 08:54:02
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树、TreeMap与TreeSet(上) Java集合(4)一 红黑树、TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 ArrayList<E>和LinkList<E>在继承关系上都继承自List<E>接口,上篇文章我们分析了List<E>接口的特点:有序,可以重复,并且可以通过整数索引来访问。 他们在自身特点上有很多相似之处,在具体实现上ArrayList<E>和LinkList<E>又有很大不同,ArrayList<E>通过数组实现,LinkList<E>则使用了双向链表。将他们放到一起学习可以更清楚的理解他们的区别。 框架结构 从上面的结构图可以看出ArrayList<E>和LinkList<E>在继承结构上基本相同,值得注意的是LinkList<E>在继承了List<E>接口的同时还继承了Deque<E>接口。 Deque<E>是一个双端队列的接口,LinkList<E>由于在实现上采用了双向链表,所以可以很自然的实现双端队列头尾进出的特点。 数据结构 上一篇文章中我们说过,为什么一个Collection<E>接口会衍生出这么多实现类,其中最大的原因就是每一种实现在数据结构上都有差别

数据结构---数组

≡放荡痞女 提交于 2020-03-31 08:35:43
线性表 ,顾名思义就像一条线一样,线性表是有序的,这个 “有序”不是从小到大之类的概念。当然与之对应就是 散列表 ,散就是乱的,无序的。 Java 中 List 和 Set ,我们遍历 List 每次结果都是一样,这就是所谓的有序,遍历 Set ,每次出来的结果可能都不一样,这就是无序的。 数组 是一种相同数据类型的元素组成的集合,是一种线性表,同样属于线性表结构的还有链表,队列,栈。 数组在内存需要连续的空间来存放,这就是为什么申明数组的时候一定要设置大小,因为只有设置了大小,才知道这个数组需要多大的内存空间,才能去内存中寻找大小合适的空间存放。正是因为它是连续的,而且都是有下标索引的,所以具有很好的随机访问性。 为什么数组具有很好的随机访问性?为什么数据可以根据下标访问?为什么下标要从 0 开始? 这就要说一下数组存储结构。 比如 int[] arr = new int[2] 这个数组去内存开辟空间的时候, 假如 arr 在内存的位置是从 1000 开始的,那么 Arr[0] 在内存中的位置是    1000 Arr[1] 在内存中的位置是    1000 + arr[0] 数据大小 Arr[2] 在内存中的位置是    1000 + arr[0] 数据大小 + arr[1] 数据大小 因为数组都是同一种数据类型所以每个元素的数据大小是一样的,换做如下表示就更清晰了 Arr[0

android 中 ArrayList 、LinkList、List 区别

ぐ巨炮叔叔 提交于 2020-03-31 07:11:55
1.大学数据结构中ArrayList是实现了基于动态数组的数据结构,LinkList基于链表的数据结构。 2.对于随机访问get和set,ArrayList优于LinkList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinkList比较占优势,因为ArrayList要移动数据。 从上面三点可以看出: ArrayList和LinkList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。 而,List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。 总结如下: List是一个接口,ArrayList、LinkList继承与这个接口并实现了它. 用的时候,可以这么用: List<String> list = new ArrayList<String 等同于 ArrayList<String> list=new ArrayList<String> 来源: https://www.cnblogs.com/boyupeng/archive/2011/04/19/2028520.html

Java集合框架(List,Set,Map)

♀尐吖头ヾ 提交于 2020-03-30 12:08:51
单列集合基本框架 List接口特点: 1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。 2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。 3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。 4.List 接口提供了特殊的迭代器,称为 ListIterator ,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。 List接口常用实现类: ## vector集合 Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。 由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的 特点:1.线程同步的2.底层是数组实现的 特有方法 Enumeration<E> elements() ##ArrayList集合 1.底层是数组实现的 2.不是线程同步的 3.查询比较快 java.util.ArrayList`集合数据存储的结构是数组结构。方便元素随机访问。 ## LinkedList集合 1.底层是一个链表实现的 2.不同步。线程不安全 3