arraylist

Java序列化流-ObjectOutputStream、ObjectInputStream

别等时光非礼了梦想. 提交于 2020-03-09 20:21:20
Java对象流的基本概念: 实例代码: 实体类User: 1 import java.io.Serializable; 2 3 /** 4 * @author zsh 5 * @company wlgzs 6 * @create 2019-01-25 15:11 7 * @Describe 8 */ 9 public class User implements Serializable { 10 11 private Integer id; 12 13 private String name; 14 15 public User(Integer id, String name) { 16 this.id = id; 17 this.name = name; 18 } 19 20 @Override 21 public String toString() { 22 return "User{" + 23 "id=" + id + 24 ", name='" + name + '\'' + 25 '}'; 26 } 27 } Main类: 1 import java.io.*; 2 import java.util.ArrayList; 3 4 public class Main { 5 6 public static void main(String[] args) throws

ArrayList的集合特性

﹥>﹥吖頭↗ 提交于 2020-03-09 11:42:27
举例新建ArrayList的方法(多态): 可以调用List接口中的方法: 还有collections的方法 集合的默认容量是10,但是,经常我们会超过这个容量,每次超过容量都会变成原容量的1.5倍。 其底层实现原理:增加原来集合长度二进制右移的容量所以原来长度二进制右移一位就是原长度的一半 为什么右移一位就是一半呢? :右移一位数学的理解方法:(每一位的数值都可以用2^(n-1)表示--左移相当于(n-1)变成了(n-2)--------数值统一除以2所以他的值就是原来的一半) 注意ArrayList是我们最常用的一个集合,因为他易于检索,像我们大多数都是在集合的末尾添加元素,这样的话增删元素就不会对程序的运行速度产生影响 来源: https://www.cnblogs.com/LWF6869/p/12447459.html

ArrayList学习笔记

≡放荡痞女 提交于 2020-03-09 08:03:43
1.ArrayList ArrayList底层是数组实现的存储,与它类似的是LinkedList,两者间的区别: ArrayList:查找与访问元素的速度快,但是新增、删除的速度慢。 LinkedList:新增、删除的速度快,查找的速度慢。 2.ArrayList为什么是线程不安全的还使用? 平时的场景中,基本都是用来查询的,不会设计太频繁的新增和删除 如果设计到新增和删除可以使用LinkedList。 如果需要线程安全,可以使用Vector。 3.ArrayList底层是如何实现的? 在new ArrayList()创建一个集合的时候,会初始化一个容量为0的Object[] 当再次执行add添加数据的时候,才会默认分配一个capacity=10的初始容量 4.ArrayList可以存放无限长度的数组是如何实现的? 通过数组扩容方式,如果有一个长度为10的数组,要新增一个元素,发现数组已经满了,它会执行一下几个步骤: 重新定义一个长度为10+10/2的数组。 然后把原有的数组原封不动的复制到新得数组中,再把指向原数组中的地址换到新数组的地址。 5.ArrayList新增时为什么慢? 首先在新增的时候会进行一个长度校验的判断 ensureCapacityInternal,判断是否需要扩容。 扩容的时候,jdk8以后采用了位运算符,效率更高。 int newCapacity =

C#索引器理解

岁酱吖の 提交于 2020-03-08 23:59:09
C#索引器介绍举例 索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。 索引器和数组比较: (1)索引器的索引值(Index)类型不受限制 (2)索引器允许重载 (3)索引器不是一个变量 索引器和属性的不同点 (1)属性以名称来标识,索引器以函数形式标识 (2)索引器可以被重载,属性不可以 (3)索引器不能声明为static,属性可以 一个简单的索引器例子 using System; using System.Collections; public class IndexerClass { private string[] name = new string[2]; //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象 public string this[int index] { //实现索引器的get方法 get { if (index < 2) { return name[index]; } return null; } //实现索引器的set方法 set { if (index < 2) { name[index] = value; } } } } public class Test { static void Main() { //索引器的使用 IndexerClass Indexer =

ArrayList的常用方法

二次信任 提交于 2020-03-08 22:20:57
ArrayList的常用方法 add: 增加 @Test public void test1(){ ArrayList heros=new ArrayList(); for (int i=0;i<=5;i++){ heros.add(new Hero("hero"+i)); } System.out.println(heros); //方式二: //创建要追加的对象 在指定的位置追加对象 Hero hero1=new Hero("盖伦提莫"); heros.add(3,hero1); System.out.println(heros); //通过contaios判断对象是否在容器当中 //是同一个对象不是同一名字 System.out.println("虽然一个新的对象名字也叫 hero 1,但是contains的返回是:"); System.out.print(heros.contains(new Hero("hero 1"))); System.out.print("然而对hero1的判断,则返回的是:"); System.out.println(heros.contains(hero1)); } contains: 判断是否存在 get: 获取指定位置的对象 @Test public void test(){ ArrayList heros=new ArrayList();

集合和集合操作

和自甴很熟 提交于 2020-03-08 05:39:34
集合 ArrayList //集合 ArrayList类 //集合是一组可变数量的元素组合 一般来说 这些元素的类型是相同的 只能是一维的 //初始化 //ArrayList al = new ArrayList(); //添加元素到集合的最后 //al.Add(1); //al.Add(2); //al.Add(2); //al.Add(4); //Console.WriteLine(al[1]); ////插入 在某个索引号处插入某个值 插入之后索引号的原值被顶到下一索引号去 以此类推 //al.Insert(1,9);//object是所有类的基类,可以放所有类 //Console.Write(al[1]); //al.Remove(2);//括号里放的是移除的值 只移除从前往后的第一个值 //al.RemoveAt(2);//括号里放的是移除值的索引号 //遍历集合 //foreach (object a in al) //{ // Console.WriteLine(a); //} //定义个数接收 //int geshu = al.Count; //清空集合 //al.Clear(); //判断是否包含某个值 //bool b = al.Contains(3); //自动排序 升序 //al.Sort(); //将集合翻转 //al.Reverse();/

斗地主案例的代码实现

二次信任 提交于 2020-03-07 23:25:18
package com.learn.demo04.Test; import java.util.ArrayList; import java.util.Collections; /* 斗地主综合案例: 1.准备牌 2.洗牌 3.发牌 4.看牌 */ public class DouDiZhu { public static void main(String[] args) { //1.准备牌 //定义一个存储54张牌的ArrayList集合,泛型使用String ArrayList<String> poker = new ArrayList<>(); //定义两个数组,一个数组存储牌的花色,一个数组存储牌的序号 String[] colors = {"♠","♥","♣","♦"}; String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"}; //先把大王和小王存储到poker集合中 poker.add("大王"); poker.add("小王"); //循环嵌套遍历两个数组,组装52张牌 for(String number : numbers){ for (String color : colors) { //System.out.println(color+number); /

Java设计模式—原型模式

瘦欲@ 提交于 2020-03-07 22:17:31
原型设计模式是一种比较简单的设计模式,在项目中使用的场景非常多。 个人理解: 原型模式实现了对Java中某个对象的克隆功能,即该对象的类必须implements实现Cloneable接口来标识为可被克隆,然后需要覆写Object类的clone( )方法。 简单点说就是:实现一个接口重写一个方法就可以实现原型模式。 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 通用类图如下所示: 原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的,为什么说是“标示”呢?翻开JDK的帮助看看Cloneable是一个方法都没有的,这个接口只是一个标记作用,在JVM中具有这个标记的对象才有可能被拷贝。那怎么才能从“有可能被拷贝”转换为“可以被拷贝”呢?方法是覆盖clone()方法,是的,你没有看错是重写clone()方法。 通用源代码也相当简单如下: public class PrototypeClass implements Cloneable{ //覆写父类Object方法 @Override public PrototypeClass clone(){ PrototypeClass prototypeClass = null; try { prototypeClass =

The content of the adapter has changed but ListView did not receive a notification

旧时模样 提交于 2020-03-07 22:13:01
The content of the adapter has changed but ListView did not receive a notification 在 Android开发过程中,使用了大量的 ListView,发现这个错误偶尔会出现。特别是做压力测试的时候,不停的点击刷新,更容易出现这个错误。代码中已经使用了 Adapter的 notifyDataSetChanged()方法通知 UI更新了,但是还是会出现这个错误。究其根本原因,还是线程之间同步的问题。比如,线程 1更新了 Adapter中的内容,却还没有来得及通知内容已经更新,就又有线程 2更新了 Adapter中的内容,这个时候如果线程 1再通知内容更新,就会出现上述异常了。 在此提出一些解决办法: 对线程进行管理,如果当前 Actitivty暂停了,及时停止这些线程。 数据更新后,要及时使用 notifyDataSetChanged()方法通知 UI,避免出现数据不一致的情况。 数据的更新,最好放在主线程中进行。这样可以使用同步数据更新与通知内容更新部分的代码。 最后补充一条我最终解决问题的方法: 在用到多线程的时候,可以对数据做缓存处理, 比如与ListView绑定的数据存储在ArrayList ( dataList ), 在线程中先将数据加入到临时ArrayList( tmpList ) , 最后在调用

Reading notes : java.util.Collection

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-07 19:59:36
statement !!! all the contents below excerpt from "Introduction to Java Programming, Comprehensive Version 10th edition" The Java Collections Framework Collection Interface method Each collection is Iterable . You can obtain its Iterator object to traverse all the elements in the collection. Iterator is a classic design pattern for walking through a data structure without having to expose the details of how data is stored in the data structure. import java.util.*; Collection<String> collection = new ArrayList<>(); ArrayList<String> collection1 = new ArrayList<>(); Iterator<String> iterator =