博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.9 容器
阅读量:4919 次
发布时间:2019-06-11

本文共 3300 字,大约阅读时间需要 11 分钟。

容器(Collection)

数组是一种容器, 集合也是一种容器
java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器
           (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组, 数组的长度是固定的, 这就出现一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内存, 随便往里添加)     

Collection   目前来说比较重要的两个子接口List,set。

 add()添加元素      addAll (  )往一个集合添加另一个集合     删除:remove(索引)  

接口: 

import java.util.ArrayList;import java.util.Collection;public class Test {	public static void main(String[] args) {                Collection m = new ArrayList();  //接口不能直接new,实现类 ArrayList可以				m.add(123);  		m.add("aaa");		m.add(new Person());				m.remove(new Person()); 		m.remove(new Integer(123));				System.out.println(m.size()); // 1		System.out.println(m); // aaa 				}}

List 接口:*ArrayList 和 LinkedList 的区别

List接口(可以重复, 有顺序)

    *ArrayList---实现类(以数组为底层的实现机制)
      查询速度快, 但是增删改效率低
    LinkedList---实现类(以链表为底层的实现机制)
      查询速度慢, 增删改的效率高
      有顺序, 可以重复

 

Collection接口的使用

Collection<String> c = new ArrayList<String>();
问题:
为什么不直接写ArrayList<String> a = new ArrayList<String>();
c.add(参数类型必须是Object)
c.remove方法: 通过判断两个对象是否互相的equals来确定是不是该删除该对象, 自定义的类, 需要自己重写父类的equals方法

重写equals方法, 也应该重写hashCode方法

hashCode通常用来做索引, 一个对象通过它的hashCode的值可以找到它在内存中的地址, 所以两个对象如果equals了, 而且又要作为索引的情况下, hashCode的值必须相等

import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.LinkedList;public class Test {	public static void main(String[] args) {		Collection m = new LinkedList();				m.add(123);		m.add("aaa");		m.add(new Person());				m.remove(new Person());     //没删掉     需要重写e方法		m.remove(new Integer(123));				System.out.println(m.size()); //   打印出2		System.out.println(m); // 打印出[aaa,Person[啥也没有]] 				}}

List接口:
有顺序, 可以重复添加
get
set(有一个返回值要注意 !) 
add
remove(int)
remove(Object) 
indexOf     返回某个对象在这个集合中第一次出现的索引位置
lastIndexOf      返回某个对象在这个集合中最后一次出现的索引位置
retainAll(Collection)----返回一个boolean值,
当list的内容被改变的时候返回true, 否则返回false

import java.util.ArrayList;import java.util.List;public class Test2 {	public static void main(String[] args) {		List list1 = new ArrayList();		list1.add("aaa");		list1.add(new Person());		list1.add("123");								Object o = list.get(2);      //打印123		System.out.println(o);      		Object o2 = list.set(2, 456);   //123改成了456		System.out.println(o2);       //有返回值,会把替换的对象封装变成返回值		System.out.println(list);				list.remove(1);     //移出new person		list.remove("aaa");     //移出aaa		System.out.println(list);		System.out.println(list.indexOf(new Person()));   //打印出1									}}

retainAll(Collection)----返回一个boolean值,    

当list的内容被改变的时候返回true, 没有改变返回false    

import java.util.ArrayList;import java.util.List;public class Test2 {	public static void main(String[] args) {		List list1 = new ArrayList();		list1.add("aaa");		list1.add("bbb");		list1.add("ccc");				List list2 = new ArrayList();		list2.add("aaa");		list2.add("bbb");		list2.add("ccc");		System.out.println(list1);		System.out.println(list2);		boolean f = list1.retainAll(list2);		System.out.println(f);		System.out.println(list1);		System.out.println(list2);				boolean f2 = list1.equals(list2);		System.out.println(f2);   }}

Set接口(不允许重复, 没有顺序)

Set接口中的方法没有自己定义的, 全部都是继承自Collection
    *HashSet---实现类(以哈希码表为底层的实现机制)  一定要重写equals和hashCode 
    TreeSet---实现类(以二叉树(一种数据结构)为底层的实现机制)
    没有顺序, 不可以重复(可以互相equals就叫重复)

  

  

  

转载于:https://www.cnblogs.com/syx1997/p/9021265.html

你可能感兴趣的文章
某idol的人气调查
查看>>
爬虫大作业
查看>>
androidkiller连接模拟器并修改源码调试
查看>>
java高并发核心要点|系列2|锁的底层实现原理
查看>>
Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
查看>>
文本处理方法概述
查看>>
homework3
查看>>
剑指前端(前端入门笔记系列)——Math对象
查看>>
spark学习之IDEA配置spark并wordcount提交集群
查看>>
flask seesion组件
查看>>
gprof—使用记录之自以为是优化
查看>>
Table被web编程弃用的原因
查看>>
Spring之<context:property-placeholder location="classpath:... "/>标签路径问题
查看>>
Windows API 之 FineFirstFile、FindNextFile
查看>>
C# 中两个DataTable join 连接
查看>>
杭电ACM 2046 阿牛的EOF牛肉串
查看>>
iOS的TCP/IP协议族剖析&&Socket
查看>>
C#中的NULL的初步理解
查看>>
cssText批量修改样式
查看>>
基于jQuery的俄罗斯方块
查看>>