arraylist

java集合

眉间皱痕 提交于 2020-03-04 15:40:53
java集合首先可以分为List、Set、Map这三种体系 Set:无序、不可重复的集合 List:有序、重复的集合 Map:代表具有映射关系的集合 注:java5以后又出现了queue体系集合,代表一种队列集合实现 **集合和数组的区别:**数组的元素可以是基本数据类型的值也可以是对象,而集合里只能保存对象 1.Iterator遍历元素: a)boolean hashNext():如果被迭代的集合元素还没有被遍历,则返回true b)Object next():返回集合里的下一个元素 c)void remove():删除集合里上一次next()方法返回的元素 一、HashSet 1.HashSet特点: a)不能保证元素的排列顺序 b)HashSet是不同步的,如果多个线程同时访问一个HashSet,必须要保证同步 c)集合元素值可以是null 2.HashSet用hashCode和equals方法来判断两个对象是不是同一个对象 hash算法是根据元素的值来计算出该元素的存储位置,而HashSet是通过每个元素的hashcode值来计算索引,从而可以自由增加HashSet的长度,并且可以根据元素的哈市Code值来访问元素,实际上HashSet是HashMap的一个实现类HashSet中的元素都存放在HashMap的key上面。 3.HashSet的底层实现

剑指offer——和为S的两个数字

北战南征 提交于 2020-03-04 15:14:44
题目链接:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 解题思路: 左右夹逼 1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { 4 ArrayList<Integer> res = new ArrayList<>(); 5 if(array==null || sum==0) 6 return res; 7 8 int i=0; 9 int j=array.length-1; 10 11 while(i<j) 12 { 13 if(array[i]+array[j]==sum) 14 { 15 res.add(array[i]); 16 res.add(array[j]); 17 return res; 18 } 19 else if(array[i]+array[j]<sum) 20 { 21 i++; 22 } 23 else{ 24 j--; 25 } 26 } 27 28 return res; 29 30 } 31 } 来源: https://www.cnblogs.com

[剑指offer]和为S的两个数字

六月ゝ 毕业季﹏ 提交于 2020-03-04 15:13:49
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。 题目链接:https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tqId=11195&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking package com.sunshine.OFFER66_SECOND; import org.junit.Test; import java.util.ArrayList; public class A42_FindNumbersWithSum { @Test public void test() { int[] arr = {1, 2, 3, 4}; ArrayList<Integer> arrayList = FindNumbersWithSum(arr, 5); arrayList.forEach(a -> System.out.print(a + " ")); ArrayList<Integer> arrayList1 =

2020年Java集合课堂笔记

孤人 提交于 2020-03-04 12:16:53
Java集合 1.集合概述 集合 :集合是java中提供的一种容器,可以用来存储多个数据。 集合与数组的区别: 数组长度固定,集合长度可变 数组只能存储类型相同的元素,集合存储对象,对象类型可以不同 集合框架 2.Collection接口 Collection是所有单列集合的根接口,方法可用于操作所有单列集合 Collection接口的主要方法 方法声明 功能描述 boolean add(Object o) 向集合中添加一个元素 boolean addAll(Collection c) 将集合c中的所有元素添加到该集合中 void clear() 删除该集合的所有元素 boolean remove(Object o) 删除该集合中的o boolean removeAll(Collection c) 删除该集合中包含集合c中的所有集合 boolean isEmpty() 判断该集合是否为空 boolean contains(Object o) 判断该集合中是否包含元素o boolean containsAll(Collection c) 判断该集合是否包含集合c的所有元素 int size() 判断该集合元素的个数 Iterator iterator() 用于遍历该集合的所有元素 Stream stream() 将集合源转换为有序元素的流对象 3.List接口 List接口简介

collection集合框架

只谈情不闲聊 提交于 2020-03-04 11:41:17
Java类集框架的优势: 1) 这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码。 2) 框架允许不同类型的类集以相同的方式和高度互操作方式工作。 3) 类集是容易扩展和/或修改的。为了实现这一目标,类集框架被设计成包含一组标准的接口。对这些接口,提供了几个标准的实现工具(例如LinkedList,    HashSet和TreeSet),通常就是这样使用的。如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可 以使你自己的类集实现更加容易。 4) 增加了允许将标准数组融合到类集框架中的机制。 常用的方法:      boolean add( E e) :向集合中增加元素,如果该类型集合允许有重复元素(如:ArrayList、LinkedList等)或者不允许有重复元素但新添加的元素不在集合中则返回true,如果该类型集合不允许有重复元素并且新添加的元素已经在集合中则返回false。 boolean addAll( Collection <? extends E > c) :将一个类集c中的所有元素添加到另一个类集(本类集)。 void clear() :清除本类集中所有元素,调用完该方法后本类集将为空。 boolean contains(Object o)

collection 框架

喜夏-厌秋 提交于 2020-03-04 11:31:04
集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等. 集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等. 集合框架类似编程中经常用到的工具类,使得编码这专注于业务层的实现,不需要从底层实现相关细节—“数据结构的封装”和”典型算法的实现”. 1. Collection框架中实现比较要实现什么接口? Comparable/comparator 2. ArrayList和Vector的区别? 这两个类都实现了List接口,List接口继承了Collection接口,他们都是有序集合.即存储在这两个集合中的元素的位置都是由顺序的,相当于一种动态的数组,我们以后可以按位置索引号来取出某个元素,并且其中的数据是允许重复的.这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素.也不允许有重复的元素.本题目本与hashset没有任何关系,但为了说清楚ArrayList和Vector的功能,我们使用对比方式,有利于说明问题. 接着才说ArrayList与Vector的区别,主要包括两个方面: (1)同步性 Vector是线程安全的

设计模式学习-建造者模式

纵然是瞬间 提交于 2020-03-04 06:30:09
建造者模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以产生不同的表示 1. 应用场景 复杂对象中,相同的方法,不同的执行顺序,会产生较大的差异。希望能够按不同的顺序调用对象的方法。 复杂对象的组成部分时常可能发生变化,但组装方法类似。比如零食套餐搭配,电脑的配置搭配等。 2.五个组成部分 抽象产品类 定义产品具体业务逻辑方法和一个调度方法,该调度方法可以控制各个业务逻辑方法的执行顺序或者产品类的组成部分。可以设置一个集合存储方法执行顺序或者零件类型。 具体产品类 产品类实现具体业务逻辑的方法。 差异性很大的产品不适合使用建造者模式。产品类通常可以结合模板方法模式。 抽象建造者 一个抽象方法设置产品的不同组成部分或者设置不同方法的执行顺序。 一个抽象方法构建产品并返回 具体的建造者 继承抽象建造者,每个类型的产品都需要一个具体的建造者。该类返回一个对应的产品 导演类 调度不同的建造者,来建造出不同的产品。场景类只需要和导演类打交道 类图如下(此处产品类是模板方法模式的类图): 3.案例模拟 需求:现在需要组装两种车,宝骏和宝马,两者组装顺序不同。宝马:底盘->轮子->车身->座椅,宝骏:底盘->车身->座椅->轮子,还有进化版的宝骏,不要轮子,直接就能飞,敞篷宝马,不要车身,底盘轮子座椅直接开 先创建一个抽象产品类和两个实现的产品类宝骏和宝马产品

手动实现一个简单的ArrayList动态数组增删改查

允我心安 提交于 2020-03-03 16:26:33
public class ArrayList < E > { //元素的数量 private int size ; //所有元素 private E [ ] elements ; // private static final int DEFAULT_CAPACITY = 10 ; private static final int ELEMENT_NOT_FOUND = - 1 ; public ArrayList ( int capaticy ) { //capatic 如果小于 DEFAULT_CAPACITY,则返回DEFAULT_CAPACITY capaticy = ( capaticy < DEFAULT_CAPACITY ) ? DEFAULT_CAPACITY : capaticy ; //新建一个长度为capaticy的数组 elements = ( E [ ] ) new Object [ capaticy ] ; } // 使用此空参构造器会创建一个长度为10的数组 public ArrayList ( ) { //this(),调用空参构造器 this ( DEFAULT_CAPACITY ) ; } //清除所有元素 public void clear ( ) { for ( int i = 0 ; i < size ; i ++ ) { /

Java集合

江枫思渺然 提交于 2020-03-03 15:40:34
容器主要包括collection和map两种,map不是collection(set,list,queue)里的 Set treeset hashset linkedhashset List arraylist linkedlist vector copyonwritearraylist Quque linkedlist priorityquque Map hashmap linkedhashmap concurrenthashmap list可以允许重复对象和插入多个null值,而set不允许;list容器是有序的,而set容器是无序的 Arraylist基于数组实现,开始不分配内存,第一个加进去的时候才分配,默认10个。添加和删除元素都需要赋值大量对象。 Collections.synchronizedList(new ArrayList())后如果要用iterator还是需要给iterator加同步锁,因为这个方法没对Iterator加锁,对add啥的倒是加了。 CopyOnWriteArrayList适合读多写少的。因为它支持读写同时进行,但是写的时候要在新的数组里写然后原始数组指向新的数组,时间空间都不占优。而且可能出现实时性差的问题,写的过程中读不到最新的。 适配器模式(不能用基本类型数组做参数,可以用包装类型)和迭代器模式 HashMap一个Entry的数组