arraylist

二、容器

安稳与你 提交于 2020-03-07 19:56:43
java容器有哪些 数组、String(底层是char数组)、java.util下 的 List、Set、Map、Queue,画图说明如下: Collection和Collections有什么区别 Collection为集合的通用接口,提供了对集合进行操作的通用接口方法 Collections为集合操作的工具类,提供了集合的静态操作方法,不能实力化 List、set、Map之间的区别是什么 三个集合操作的不同 HashMap和HashTable有什么区别 HashMap:线程不安全,效率高;key和value可以为空 HashTable:线程安排,效率低;key和value都不能为空 如何决定使用HashMap还是TreeMap HashMap不支持排序,查询效率高;TreeMap默认用key排序,也支持自定义排序,查询效率低;如无排序要求,尽量使用HashMap HashMap的实现原理 利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 存储时,如果没有该hash值得key,则放入;如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中 获取时,直接找到hash值对应的下标,在进一步判断key是否相同,如果相同,取出该值;如果不同,从链表中找对应值。

数据结构-数组

你说的曾经没有我的故事 提交于 2020-03-07 17:46:50
  一、数组的概念   定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。   从概念中可以知道一下几点: 数组是线性表。     所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构        连续的内存空间和形同类型的数据。    正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问 数组实现下标随机访问   下面通过一个实际的例子来说明:   例如有一个长度为10的int数组,int[] a = new int[10].      计算机给数组a[10]分配了一块连续的内存空间1000~1039,其中,内存块的首地址为base_address = 1000.   计算机会为每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算即需要随机访问数组中的某个元素的时候,它会首先通过下面的寻址公式,计算该元素存存储的内存地址:            a[i]_address = base_address + i * data_type_size    其中data_type_size表示数组中每个元素的大小。例如,数组中存储的int类型的数据,所以,data_type_size就是4字节。 二、数组的操作  

代理与动态代理

删除回忆录丶 提交于 2020-03-07 17:42:19
概述 代理 生活中的代理: 比如暴雪又新出了一款游戏,作为一个中国用户,没有很好的方式直接从美国拿到游戏产品,就需要等到中国的某个代理商被暴雪授权代理,才可以玩上暴雪新出的这款游戏,那么代理的作用也就显而易见了,就是为了方便的适应一些不同地区的用户而产生的中间媒介,通过代理,可以更有效的将一些产品发行出去,生活中这样代理的例子比比皆是 程序中的代理: 如果一些实现了同一接口的类在实现方法的时候,有了新的需求,需要增加一些异常处理、日志、计算方法的运行时间、事务管理等操作,但是我们又不能去修改源代码,这样严重影响了程序的扩展性,这个时候,我们就可以使用代理,代理与目标类实现同一个接口,代表着代理类与目标类具有同名的方法,调用者不需要直接调用目标对象,而是使用代理间接调用目标对象的方法,并在这个过程中加入自己的处理代码,这就是程序中的代理 代理实现图示 代理可以处理的问题 系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示: 用具体的程序代码描述交叉业务: 交叉业务的编程问题即为面向方面的编程(Aspect oriented program ,简称AOP),AOP的目标就是要使交叉业务模块化。 可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,如下所示: 使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

ArrayList和HashTable妙用一

主宰稳场 提交于 2020-03-07 17:34:24
ArrayList和HashTable妙用一 今天我们主要研究的问题是ArrayList和HashTable的使用。在这里我们引入集合的概念。如何理解集合呢?我们可以将集合看做是“长度可变的,具有很多方法的数组” 下面我们逐步进行演示 图一、ArrayList ArrayList.Add() Add这个方法可以往里面添加任何东西,如下图所示。 图二、ArrayListAdd 图三、Add方法能遍历 ArrayList泛型集合,上接开头我们讨论的问题,数组都已经限定好了,而集合是想往里面放什么就可以往里面放什么。也可以这么理解,就是集合的范围比数组的范围大。 下面演示ArrayList里面的另外一个方法:.AddRange 图四、方法Add和Range的区别 图五、AddRange的遍历 图六、Clear方法 图七、Contains判断集合当中有没有这个元素 图八、IndexOf 图九、Insert 图十、InsertRange 图十一、LastIndexOf 图十二、Remove 图十三、RemoveAt 图十四、RemoveRange 图十五、Reverse反转 图十六、一道练习题 图十七、题目二用insert方法 图十八、题二的方法2用for循环做 上面我们总结了ArrayList泛型集合的很多的方法。想必这种图解的方法对C#初学者来讲,可能比看枯燥的教材来的更加的实惠

java集合之ArrayList,TreeSet和HashMap分析

我与影子孤独终老i 提交于 2020-03-07 08:19:45
java集合是一个重点和难点,如果我们刻意记住所有的用法与区别则是不太现实的, 之前一直在使用相关的集合类,但是没有仔细研究区别,现在来把平时使用比较频繁的一些集合 做一下分析和总结,目的就是以后在需要使用的时候能给找到适合的类。 说到集合,先来看看数组,Array和集合相比,主要的问题是不能动态的改变长度,也不能删除元素, 在某些场景下不适合使用,而集合的话会灵活很多。 集合中我们常用的3个接口是:List,Set和Map,而对应的实现类常用的有ArrayList,TreeSet和HashMap, 接下来就来总结一下这3个实现类的特点。 Collection 是层次结构中的根接口,JDK 不提供此接口的任何直接实现:它提供更具体的 子接口(如 Set 和 List)实现。 Set,无序的,一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2, 并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map和Collection接口没有关系,Map包含了key-value对,key唯一,value不唯一。 接下来我们依次来说说最常用的ArrayList,TreeSet和HashMap。 1.

Java学习记录|集合类

梦想与她 提交于 2020-03-07 02:29:42
集合:就是一个容器,放置数据,一般一个集合中放同一类型的数据 集合类中也有很多方法,使用中再熟练即可 集合类的有序性: 添加元素会按照添加的顺序排列; 集合里面的数据可以重复 1. ArrayList get(index):获得指定索引的数据 add(object):添加一条数据 add(index,element): 插入,在指定位置添加数据 public static void main ( String [ ] args ) { ArrayList al = new ArrayList ( ) ; //集合类对象 al . add ( "小明" ) ; //集合里面数据的添加 al . add ( "小华" ) ; al . add ( "小林" ) ; System . out . println ( al . get ( 0 ) ) ; //集合数据的访问,提供索引即可 } //返回小明 addall(collection):添加多条数据 在上面代码基础上 ArrayList al2 = new ArrayList ( ) ; //集合类对象 al2 . addAll ( al ) ; System . out . println ( al2 ) ; 输出 [ 小明 , 小华 , 小林 ] 遍历数据,添加for循环 法1: get方法和size方法 for ( int i

栈01--[栈接口设计&&栈应用]

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-06 11:58:15
1.栈 2.栈的接口设计 java官方的stack实现是继承自 vector(类似数组) vector 是线程安全的 ArrayList是非线程安全的 3.栈的应用--浏览器的前进和后退 只要输入新的网址 右边的那个栈数据都会被清空 4.代码 java版本实现 public class Stack<E> { private List<E> list = new ArrayList<>(); public void clear() { list.clear(); } public int size() { return list.size(); } public boolean isEmpty() { return list.isEmpty(); } public void push(E element) { list.add(element); } public E pop() { return list.remove(list.size() - 1); } public E top() { return list.get(list.size() - 1); } } View Code 来源: https://www.cnblogs.com/ggnbnb/p/12425604.html

How to calculate the listed numbers from the child datastore?

*爱你&永不变心* 提交于 2020-03-06 10:58:46
问题 I'm using the Synesty SpreadsheetMapper tool, I want to get the total of the children column from the field "PackageWeight" and show it in the parent column field. This code only shows the listed numbers from the children datastore. <#if (row.children()?? && row.children()?size > 0)> <#list row.children() as c> ${c.get('PackageWeight')!}, </#list> </#if> How can I sum the listed numbers? Here is the example https://prnt.sc/r3y223 来源: https://stackoverflow.com/questions/60277275/how-to

Java基础之泛型

◇◆丶佛笑我妖孽 提交于 2020-03-06 06:51:27
一、泛型的理解与简单使用 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。 1.1、泛型在接口上的使用: package com.luo.test; public interface TestInterface<T> { String objectToString(T o); } 对应实现类可以这样: package com.luo.test; public class TestInterfaceImpl<T> implements TestInterface<T> { public String objectToString(T o) { return o.toString(); } public static

Linq操作ArrayList

孤街浪徒 提交于 2020-03-06 02:02:34
ArrayList实现了System.Collections空间下的IEnumerable接口,这个接口是非泛型的。如果要使用LINQ,必须声明枚举变量的类型,依赖Cast查询运算符转换枚举类型。 using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; namespace ConsoleApp4 { class Program { static void Main(string[] args) { var arrayList = GetArrayList(); //查询表达式 var query = from Student student in arrayList where student.Scores[0] > 95 select student; //方法调用 var query2 = arrayList.Cast<Student>().Where(x => x.Scores[0] > 95); } static ArrayList GetArrayList() { ArrayList arrList = new ArrayList { new Student {