练习:自己写一个容器arraylist集合一一数组综合练习2

PoeticalJustice PoeticalJustice     2022-09-22     316

关键词:

  1 package cn.bjsxt.collection;
  2 
  3 /**
  4  * 自己实现一个ArrayList
  5  */
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 
  9 public class SxtArrayList /* implements List */{
 10 
 11     private Object[] elementDate;
 12     // 要放入的元素大小
 13     private int size;
 14 
 15     public int size() {
 16         return size;
 17     }
 18 
 19     // 无参构造器
 20     public SxtArrayList() {
 21         // 默认容量10
 22         this(10);
 23 
 24     }
 25 
 26     // 有参构造器 initialCapacity初始容量
 27 
 28     public SxtArrayList(int initialCapacity) {
 29 
 30         if (initialCapacity < 0) {
 31             try {
 32                 throw new Exception();
 33             } catch (Exception e) {
 34 
 35                 e.printStackTrace();
 36             }
 37         }
 38         elementDate = new Object[initialCapacity];
 39     }
 40 
 41     // 添加方法
 42     public void add(Object obj) {
 43         // 数组扩容
 44         if (size >= elementDate.length) {
 45             Object[] newArray = new Object[size * 3 / 2 + 1];
 46             // 数据copy 原数组
 47             System.arraycopy(elementDate, 0, newArray, 0, elementDate.length);
 48             // for(int i=0;i<elementDate.length;i++){
 49             // newArray[i]=elementDate[i];
 50             // }
 51             // 换成新的数组
 52             elementDate = newArray;
 53         }
 54         elementDate[size] = obj;
 55         size++;
 56     }
 57 
 58     // 判断是否为空
 59     public boolean isEmpty() {
 60         return size == 0;
 61     }
 62 
 63     // 获取下标索引元素
 64     public Object get(int index) {
 65         // 索引判断的方法 我们下面对其进行了封装 既方法 rangeCheck();
 66         rangeCheck(index);
 67         // if(index<0||index>=size){
 68         // try {
 69         // throw new Exception();
 70         // } catch (Exception e) {
 71         // // TODO Auto-generated catch block
 72         // e.printStackTrace();
 73         // }
 74         // }
 75         return elementDate[index];
 76     }
 77 
 78     public void remove(int index) {
 79         // 下标判断
 80         rangeCheck(index);
 81 
 82         int numMoved = size - index - 1;
 83         if (numMoved > 0) {
 84 
 85             // 数据copy
 86             System.arraycopy(elementDate, index + 1, elementDate, index,
 87                     numMoved);
 88         }
 89         elementDate[size] = null;
 90         --size;
 91 
 92         elementDate=elementDate;
 93 
 94     }
 95     public void remove(Object obj){
 96         
 97         for(int i=0;i<size;i++){
 98             //底层掉的是equals方法 而不是==
 99             if(get(i).equals(obj)){
100                 remove(i);
101                 
102             }
103         }
104         
105     }
106     //
107     public Object set(int index,Object obj){
108         rangeCheck(index);
109         Object oldValue = elementDate[index];
110         return oldValue;
111     }
112 
113     public void rangeCheck(int index) {
114         // 索引判断的方法  我们下面对其进行了封装 既方法  rangeCheck();
115         if (index >= size) {
116             try {
117                 throw new Exception();
118             } catch (Exception e) {
119                 
120                 e.printStackTrace();
121             }
122         }
123 
124     }
125     public void ensureCapacity(){
126         // 数组扩容
127         if (size >= elementDate.length) {
128             Object[] newArray = new Object[size * 3 / 2 + 1];
129             // 数据copy 原数组
130             System.arraycopy(elementDate, 0, newArray, 0, elementDate.length);
131             // for(int i=0;i<elementDate.length;i++){
132             // newArray[i]=elementDate[i];
133             // }
134             // 换成新的数组
135             elementDate = newArray;
136         }
137     }
138     //
139     public void add(int index , Object obj){
140         //下标判断
141         rangeCheck(index);
142         // 数组扩容
143         ensureCapacity();
144         
145         System.arraycopy(elementDate, index, elementDate, index+1, size-index);
146         elementDate[index]=obj;
147         size++;
148     }
149 
150     public static void main(String[] args) {
151 
152         SxtArrayList list = new SxtArrayList(3);
153         list.add("333");
154         list.add("444");
155         list.add("333");
156         list.add("333");
157         list.add("444");
158         list.add("333");
159         // System.out.println(list.size());
160         // System.out.println(list.isEmpty());
161         // System.out.println(list.get(4));
162         // System.out.println(list.get(5));
163         // System.out.println(list.get(6));
164 //        list.remove(5);
165 //        System.out.println(list.get(5));
166         System.out.println(list.size());
167         for(int i=0;i<list.size();i++){
168             System.out.println(list.get(i));
169         }
170     }
171 }

 

arraylist底层源码实现练习(代码片段)

/***Createdbychengbxon2018/5/17.*自己实现一个ArrayList,帮助我们更好的理解ArrayList的底层结构!*一句话概括ArrayList的底层:数组的扩容与数据的拷贝!*/publicclassCbxArrayList//存储集合中的元素privateObject[]elementData;//容器中存储的元素数量... 查看详情

可变数组集合arraylist

...此类大致上等同于Vector类,除了此类是不同步的。)每个ArrayList实例都有一个容量,默认长度是10,ArrayList将添加的对象实质上是保存在Object数组中,当保存对象的数量足够多且达到容器长度的最大值时,Arr 查看详情

集合类collection接口arraylist

数组:存储同一种数据类型的集合容器.数组的特点:1.只能存储同一种数据类型的数据。2.一旦初始化,长度固定。 3.数组中的元素与元素之间的内存地址是连续的。  :Object类型的数组可以存储任意类型的数据。集合:... 查看详情

练习:序列化集合(代码片段)

1packagecom.itheima.demo04.ObjectStream;23importjava.io.*;4importjava.util.ArrayList;56/*7练习:序列化集合8当我们想在文件中保存多个对象的时候9可以把多个对象存储到一个集合中10对集合进序列化和反序列化11分析:121.定义一个存储Person对象的Arra... 查看详情

自己实现arraylist

思路:一载体 ArrayList是一个集合容器,必然要有一个保存数据的载体。publicclassMyArraylist{privatefinalstaticintINIT_COUNT=10;Object[]arrays;publicMyArraylist(){this(INIT_COUNT);}publicMyArraylist(intcount){arrays=newObject[c 查看详情

java,list:定义一个list数组怎么没法定义?该怎么定义...

我想定义一个ArrayList类型的数组ArrayList<Integer>a[]=newArrayList[10]<Integer>;为什么报错,arrayList本身就是一个数组了没必要那样定义。List集合包括JavaList接口以及List接口的所有实现类,List集合中的元素允许重复,各元素的顺序... 查看详情

java的数组和arraylist

ArrayList就是基于数组创建的容器类 一、数组声明了它容纳的元素的类型,而集合不声明。二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改... 查看详情

day14集合框架--arraylist容器

...CollectionDemo创建一个集合容器。使用Collection接口的子类,ArrayList/*1,add方法的参数类型是Object。以便于接受任意类型对象。   2,集合中存储的都是对象的引用(地址)*/importjava.uti 查看详情

arraylist集合练习题(代码片段)

...加到集合,并遍历集合。代码实现packagedemo05;importjava.util.ArrayList;importjava.util.Random;/*思路:1.需要存储6个数字,创建一个集合,<Integer>2.产生随机数,需要用到Random3.用循环6次,来产生6个随机数字:for循环4.循环内调用r.nextIn... 查看详情

练习:序列化集合(代码片段)

1packagecom.itheima.demo04.ObjectStream;23importjava.io.*;4importjava.util.ArrayList;56/*7练习:序列化集合8当我们想在文件中保存多个对象的时候9可以把多个对象存储到一个集合中10对集合进序列化和反序列化11分析:121.定义一个存储Person对象的Arra... 查看详情

111

CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的... 查看详情

集合类之arraylist(代码片段)

1.1集合概述A:我们学习的是面向对象编程语言,而面向对象编程语言对事物的描述都是通过对象来体现的。为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储,就不能是一个基本的变... 查看详情

arraylist集合

1、ArrayList集合概述ArrayList集合是JDK提供的一个类,ArrayList中封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会分配一个更大的数组来存储这些元素。因此,可以将ArrayList集合看作是一个长度可变的数组。2、... 查看详情

java——collection集合

一、概述ArrayList就是集合,集合就是一种能够存储多个数据的容器。常见的容器有集合和数组。二、集合和数组有什么区别集合长度可变,数组长度不可变集合可以只能存储引用数据类型(如果要存储基本数据类型需要进行装箱)... 查看详情

arraylistpklinkedlist(代码片段)

? ArrayList和LinkedList,这两个集合大家都不陌生.尤其是ArrayList,可以说是日常开发中用的最多的容器了.而且这两个集合的知识点几乎可以说面试必问的.ArrayList? ArrayList是List接口的一个实现类,底层是基于数组实现的存储结构,数据... 查看详情

java容器-arraylist

容器的概念  在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体。容器中常用的方法1intsize();返回大小2booleanisEm... 查看详情

java从入门到放弃·arraylist集合小练习

练习1(存储随机数字)题目:生成10个1~55之间的随机数,添加到集合中,并且遍历输出。先来解析一下这道题,给出思路1.需要存储10个整数,所以创建一个<Integer>的集合2.需要产生随机数,用到Random类3.产生10个随机数,使用... 查看详情

菜鸟刷面试题(java容器篇)(代码片段)

...eMap?说一下HashMap的实现原理?说一下HashSet的实现原理?ArrayList和LinkedList的区别是什么?如何实现数组和List之间的转换?ArrayList和Vector的区别是什么?Array和ArrayList有何区别?在Queue中poll()和remove()有什么区别?哪些集合类是线... 查看详情