arraylist

从尾到头打印链表

☆樱花仙子☆ 提交于 2019-12-16 08:11:31
import java.util.ArrayList; import java.util.List; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } class Solution { public ListNode head; public ListNode val; public Solution() { this.head = null; } public void addFirst(int data) { ListNode node = new ListNode(data); if (this.head == null) { head = node; } else { node.next = head; head = node; } } public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> s=new ArrayList<Integer>(); while(listNode!=null){ s.add(0,listNode.val); listNode=listNode.next; } return s; } } public

JAVA开发经验

白昼怎懂夜的黑 提交于 2019-12-15 23:58:55
1.1.直接赋值常量值,禁止声明新对象 直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值。 反例: Long i = new Long ( 1 L ) ; String s = new String ( "abc" ) ; 正例: Long i = 1 L ; String s = "abc" ; 1.2.当成员变量值无需改变时,尽量定义为静态常量 在类的每个对象实例中,每个成员变量都有一份副本,而成员静态常量只有一份实例。 反例: public class HttpConnection { private final long timeout = 5 L ; . . . } 正例: public class HttpConnection { private static final long TIMEOUT = 5 L ; . . . } 1.3.尽量使用基本数据类型,避免自动装箱和拆箱 Java 中的基本数据类型double、float、long、int、short、char、boolean,分别对应包装类Double、Float、Long、Integer、Short、Character、Boolean。JVM支持基本类型与对应包装类的自动转换,被称为自动装箱和拆箱。装箱和拆箱都是需要CPU和内存资源的,所以应尽量避免使用自动装箱和拆箱。 反例: Integer

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

大憨熊 提交于 2019-12-15 18:04:46
自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 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的常用方法

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-15 17:20:27
java中ArrayList是Java集合中非常重要的 下面列举出ArrayList的常用方法 import java . util . * ; public class ArrayListDome { public static void main ( String [ ] args ) { // TODO 自动生成的方法存根 ArrayList < String > list = new ArrayList < String > ( ) ; list . add ( "1" ) ; list . add ( "abc" ) ; Object list1 = list . clone ( ) ; System . out . println ( list1 ) ; //list.clear();清楚list容器中的所有内容 System . out . println ( list . get ( 0 ) ) ; //获取位置的值,list在底层是用数组实现的。 // Object[]arr = list.toArray();//吧list集合转化为数组,注意转化过来的数组的类型是Object类型的 list . isEmpty ( ) ; //判空 返回值是一个boolean类型的值 ,ture是空的,false不是空的 Iterator < String > iterator

ArrayList源码分析(二)

邮差的信 提交于 2019-12-15 12:35:41
ArrayList 文章目录 ArrayList ArrayList调整数组容量 默认扩容 手动扩容 ensureCapacityTest trimToSize方法 fail-fast机制 单线程环境下的fail-fast 多线程环境下的fail-fast iterator分析 避免fail-fast 方法1 方法2 ArrayList调整数组容量 默认扩容 每当向数组中添加元素时,都要去检查添加后元素的个数是否会超出当前数组的长度,如果超出,数组将会进行扩容,以满足添加数据的需求 private void ensureCapacityInternal ( int minCapacity ) { if ( elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA ) { minCapacity = Math . max ( DEFAULT_CAPACITY , minCapacity ) ; } ensureExplicitCapacity ( minCapacity ) ; } private void ensureExplicitCapacity ( int minCapacity ) { modCount ++ ; // overflow-conscious code if ( minCapacity - elementData .

集合查阅的技巧

浪子不回头ぞ 提交于 2019-12-15 06:04:25
1、需要唯一吗? (1)需要:Set   需要指定顺序:     需要:TreeSet     不需要:HashSet     但是想要一个和存储一致的顺序(有序):LinkedLinkedHashSet (2)不需要:List   需要频繁增删吗?     需要:LinkedList     不需要:ArrayList 2、如何记录每一个容器的结构和所属体系呢?(看名字!) List   |--ArrayList   |--LinkedList Set   |--HashSet   |--TreeSet 后缀名就是该集合所属的体系。 前缀名就是该集合的数据结构。 (1)看到array:就要想到数组,就要想到查询快,有角标。 (2)看到link:就要想到链表,就要想到增删快,就要想到add get remove+first last的方法。 (3)看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode方法和equals方法。 (4)看到tree:就要想到二叉树,就要想到排序,就要想到两个接口:Comparable Comparator。 而且这些通用的集合容器都是不同步的。 来源: CSDN 作者: 捉猪的同伙 链接: https://blog.csdn.net/qq_42024935/article/details/103514644

小白都能看得懂的java泛型

徘徊边缘 提交于 2019-12-14 22:18:26
一、什么是泛型 泛型是Java SE 1.5的新特性,可以适应不同的很多很多类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 二、为什么使用泛型 1.使用泛型能写出更加灵活通用的代码 2.泛型将代码安全性检查提前到编译期 使用泛型后,能让编译器在编译的时候借助传入的类型参数检查对容器的插入,获取操作是否合法,从而将运行时ClassCastException转移到编译时 //没有泛型的情况下使用集合 public static void noGeneric () { ArrayList names = new ArrayList(); names.add( "张三" ); names.add( "李四" ); names.add( 123 ); //编译正常 } //有泛型的情况下使用集合 public static void useGeneric () { ArrayList<String> names = new ArrayList<>(); names.add( "张三" ); names.add( "李四" ); names.add( 123 ); //编译不通过 } 3.泛型能够省去类型强制转换 在JDK1.5之前

ArrayList集合

谁都会走 提交于 2019-12-14 19:04:54
ArrayList集合: ArrayList 集合是程序中最常见的一种集合,它属于引用数据类型(类)。 在 ArrayList 内部封装了一个长度可变的数组,当存入的元素超过数组长度时, ArrayList 会在内存中分配一个更大的数组来存储这些元素,因此可以将 ArrayList 集合看作一个长度可变的数组。 集合的创建 : 导包: import java.util.ArrayList; 集合中常用方法: 例子样式: 集合中的常用方法补充: 来源: https://www.cnblogs.com/www1842564021/p/12038459.html

ArrayList类的set()方法

旧巷老猫 提交于 2019-12-14 16:44:07
ArrayList类的set()方法用于更新指定位置的内容,若内容是new出来的,则需要调用该set()方法;否则,不需要调用该set()方法,示例如下 User.java public class User { private int id; private String name; public User(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; }  //省略get、set方法 } main.java import java.util.ArrayList; import java.util.List; public class main { public static void main(String[] args) { User user1 = new User(1, "a1"); User user2 = new User(2, "a2"); List list = new ArrayList(); list.add(user1); list.add(user2); for (int i=0; i<list

12.举例让抽象具体化(5)

社会主义新天地 提交于 2019-12-14 15:58:19
题一:【包含min函数的栈】 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 分析:时间复杂度要求高,可牺牲空间。定义两个栈stack(正常操作)和stackMin(栈顶元素是最小值)。每次push时,直接向stack压入元素,并且和stackMin栈顶元素比较,如果要压入的数据较小则压入stackMin。弹出时,看stackMin是否为空或者两个栈的栈顶元素是否相等,如果相等,则两个栈都弹出一个元素。 1 import java.util.Stack; 2 3 public class Solution { 4 //存放原数据,用于push、pop、top 5 Stack<Integer> stack = new Stack<Integer>(); 6 //每次在stack添加数据时,进行比较,stackMin栈顶元素每次是当前最小值 7 Stack<Integer> stackMin = new Stack<Integer>(); 8 public void push(int node) { 9 stack.push(node); 10 if(stackMin.empty()||stackMin.peek()>=node){ 11 stackMin.push(node); 12 } 13 } 14 15 public