java中的数组在声明的的时候都会要求输入数组的的大小,有的时候在事先会不知道要加入的东西的大小,那我们怎么定义数组的大小呢,定多大合适呢,这就成为一个难题。其实Java中的集合会解决这个问题,但它是怎么解决的呢?

下面我将要说的自定义队列,跟java中的ArrayList的实现差不多,它能够优化数组定义时固定长度的不足。

自定义队列将要实现的基本功能:

1.添加对象

2.获取指定位置对象

3.遍历整个队列

4.删除指定位置的对象

5.修改指定位置的对象

6.获取队列的大小

思想:简单地说就是创建两个数组,第二个数组的长度比第一个数的长度大1,把第一个数组中的对象赋给第二个数组,然后在第二个数组的最后加入新添加的对象,然后再把第二个数组赋给第一个数组,这就能够让你想加多少对象到数组里边都行了,数组的大小会根据你加入对象的多少来改变。

代码:

public class UserList {
private User[] src_users = new User[0];//原始用户数组对象
//在末尾添加一个用户对象
public void addLast(User user){
//新数组,长度比src_users大1
User[] dest_users = new User[src_users.length+1];
//拷贝元素
for(int i=0;i



集合中的一些重点内容:
java中的集合类:(基本功能:增添,删除,修改,查询,显示(遍历))
1.List:    ArrayList,LinkedList,Vector,stack(栈)
2.Map:    HashMap,Hashtable,TreeMap
3.Set:   HashSet,TreeSet
4.Queue:   Queue接口

List特点:有序的,可重复的
Set特点:无序的,不可重复的

ArrayList:几个基本方法:size()大小,add()增添,remove()删除,get()查询
LinkedList:与ArrayList的相比几个特有的方法:addFirst()从前面添加,addLast()从后边添加
Vector:与ArrayList差不多,只不过Vector是同步的,ArrayList是异步的
Stack:add()添加的时候是往前添加的
HashMap:是以“键--值”对的形式存储的,它不允许键的值相同(如果键的值相同,后添加的值会覆盖前边的值),键的值是唯一的,不过HashMap有一个不足之处:HashMap的遍历是没有顺序的(并不是你先存进去就先取出来),HashMap的遍历要用到Iterator(迭代器)。

HashMap与Hashtable的区别:
1.同步性:
HashMap是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,但是同步的要求会影响到执行的效率。简单地说,如果有多个线程同时访问修改Hashtable,Hashtable会让后进的线程排队等待,前面的访问完成后,后面的才能去访问,但同时访问HashMap的话,HashMap没有这种安全机制,就会使HashMap中的数据产生脏数据。
2.值:
HashMap可以让你将空值作为一个表的条目的Key或Value,但是Hashtable是不能放入空值的。

ArrayList与Vector的区别:
同步性:
Vector是同步的,ArrayList是异步的。
数据增长:
Vector缺省情况下自动增长原来的一倍的数组长度,ArrayList是原来的50%

总结:
1.线程安全:Vector,Hashtable
2.不要求线程安全:ArrayList,LinkedList,HashMap
3.键值对:HashMap,Hashtable
4.数据量很大、线程安全:Vector


自定义队列(优化了数组固定长度的弊端)以及集合中的一些重点内容相关推荐

  1. 【单调队列优化dp】jzoj4883灵知的太阳信仰 纪中集训提高B组

    [NOIP2016提高A组集训第12场11.10]灵知的太阳信仰 (File IO): input:array.in output:array.out Time Limits: 1000 ms Mem ...

  2. java将大集合按照固定长度拆分为小集合

    我们在使用java中的集合(Collection.List.Set等)的时候,可能因为某种限制需要将大集合按照固定的长度拆分为N个小的集合. 如:有一个List<String> list ...

  3. java数组的长度不确定怎么办_java中申请不定长度数组ArrayList的方法

    如下所示: import java.util.arraylist; //java中申请不定长度数组 public class test01 { public static void main(stri ...

  4. java数组规定长度_为什么Java数组固定长度?

    正如其他答案所指出的那样,固定大小是定义的一部分,你必须与原作者交谈才能找到真相. 但是作为一般观点,实现可变长度容器要复杂得多,并且有很多策略可以实现它(链表,内存重新分配-). 如果作者在20世纪 ...

  5. java数组长度定义_java怎么定义数组的长度?java中的数组长度问题

    之前对Java中的数组一直是一知半解,特别是数组中的长度问题.今天对这个问题也算是小有理解,算是对java数组的有了更进一步的了解吧.不说了,先来例子再说:package com.test; publ ...

  6. go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕

    概述 与其他编程语言类似,Go语言也有数组array.Go语言中,数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西,它就像是对数组的引用.在本文中,我们将只研究数组. 定义 ...

  7. 数组-两个数组的交集(两个集合)

    题意: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  8. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

  9. java 固定长度队列_如何彻底搞懂 Java 数据结构?|CSDN 博文精选

    作者 | 张振华.Jack 责编 | 郭芮 出品 | CSDN 博客 本文和大家一起来重温<Java数据结构>经典之作. Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? ...

最新文章

  1. 【深度学习】深度神经网络后处理之全连接CRFs(DenseCRF)
  2. Library reports error: __use_no_semihosting was requested, but _tty
  3. 使用Apache Spark让MySQL查询速度提升10倍以上
  4. 第七章 DevOps工具链
  5. Dell服务器RAID常用管理命令总结 linux
  6. 【原】android获取设备基本信息
  7. Office编程中得到extend对象
  8. 阿里移动推送服务端API
  9. solr mysql安装教程_Solr安装使用教程
  10. 前端面试题总结(js、html、小程序、React、算法、vue 、全栈热门视频资源)
  11. 使用网页操作助手制作自己的火车票抢票工具
  12. 新意互动董事长兼CEO曲伟海出席2021中国企业家博鳌论坛
  13. 菲尔人格测试今天你测了吗?
  14. JavaWeb网上订餐管理系统|餐饮就餐订餐餐厅(含源码+论文+答辩PPT等)
  15. 微信小程序参数二维码的8大使用场景
  16. signature=da0cbfb45ebebe4ea0118c0a20df185e,MS15-018:Internet Explorer 累积安全更新:2015 年 3 月 10 日...
  17. 程序员爆笑瞬间:不小心把“上传”按钮写成了“上床”……
  18. 牛客网:接雨水的双指针问题
  19. Docusign多部分请求以使用Java SDK创建信封
  20. x64dbg软件比OD更好的工具

热门文章

  1. mysql 两张表合并查询_中级数据分析-多表查询
  2. Centos修改文件打开数限制
  3. 简单地利用canvas载入视频
  4. 阿里云服务器(BT面板)Vue+Node(Egg)部署流程
  5. Django之Xadmin
  6. 基于webpack4.X从零搭建React脚手架
  7. nginx 1.14.0 配置部署 thinkphp 5.1
  8. 转://Oracle 复合压缩索引场景及性能对比
  9. 给初级拍摄者的十条好建议
  10. redhat7基本命令操作