JavaSE进阶 第十一章 集合

1.集合概述

1.1基本概念

  • 集合实际上是一个容器,可以容纳其他类型的数据
  • 集合不能存储基本数据数据类型,也不能直接存储java对象,存储的都是java对象的内存地址(引用)list.add(100);//自动装箱为Integer
  • 集合在java中本身也是也是一个对象
  • 集合底层对应不同的数据结构,常见的数据结构:数组、链表、哈希表、二叉树

1.2集合的继承结构图

java中集合分为两大类:

  • 单个方式存储元素,这一类集合中超级父接口:java.util.Collection
  • 以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map
1.2.1Collection集合继承关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.2Map集合继承关系

在这里插入图片描述

1.3常用集合存储元素的特点

List:

  • 有序可重复
  • 有序:存取顺序相同,每个元素都有下标
  • 可重复:可存储指向相同值的引用

Set(Map):

  • 无序不可重复
  • 无序:存取顺序不一定相同,集合中元素没有下标
  • 不可重复:不可存储指向相同值的引用
  • Map集合中的key,就是一个Set集合(在Set集合中放数据,实际上放到了Map集合的key部分)

SortedSet(SortedMap):

  • 关联Set(Map),无序不可重复,但是集合中的元素可以排序
  • 无序:存取顺序不一定相同,集合中元素没有下标
  • 不可重复:不可存储指向相同值的引用
  • 可排序:可以按照大小顺序排序

1.4总结常用的实现类

  • ArrayList:底层是数组
  • LinkedList:底层是双向链表
  • Vector:底层是数组,线程安全,效率低,使用较少
  • HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合中key部分
  • TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合中key部分
  • HashMap:底层是哈希表
  • Hashtable:底层也是哈希表,线程安全,效率低,使用较少
  • Properties:线程安全,key和value只能存储字符串String
  • TreeMap:底层是二叉树,TreeMap集合中的key可以自动按照大小顺序排序

2.Collection和Iterator

2.1Collection的常用语法

Collection中可以存储object的所有子类,使用泛型后,只能存储摸个具体的类型

2.1.1常用语法
//Collection c =new Collection(); 接口是抽象的,无法被实例化
Collection c = new ArrayList();//多态

//boolean add(E e)
c.add(1200);//自动装箱(JDK5)放进去的是一个对象的内存地址
c.add(new Object());

//int size()
System.out.println("集合中元素的个数为:"+c.size());

//void clear() 清空集合
c.clear();

//boolean contains(E e)
boolean flag1 = c.contains("猫猫");//fales
boolean flag2 = c.contains(1200);//true

//boolean remove(E e)
c.remove(1200);

//boolean isEmpty()
System.out.println(c.isEmpty());

//Object[] toArray()
Object[] objs = c.toArray();
2.1.2contains()与remove()

存放在集合中的类型,一定要重写equals方法
contains()方法调用equals()方法进行比对,equals返回true,就表示包含
String、Integer…已经重写了equals方法
remove()方法底层也调用equals()方法

Collection c =new ArrayList();
String s1 = new String("hello");
String s2 = new String("hello");
c.add(s1);
c.remove(s2);
System.out.println(c.size());// 0
Collection c =new ArrayList();
String s1 = new String("abc");
String s2 = new String("def");
String x = new String("abc");
c.add(s1);
System.out.println(c.contains(x));//true

在这里插入图片描述

public class Test{
   
	class User{
   
		private String name;
		public User(){
   };
		public User(String name){
   this.name = name;}
		public boolean equals(Object o){
   
			if(o == null)||!(o instanceof User)) return false;
			if(o == this) return true;
			User u = (User)o;
			return u.name.equals(this.name);
		}
	}
	public static void main(String[] args){
   
		Collection c = new ArrayList();
		User u1 = new User("jack");
		User u2 = new User("jack");
		c.add(u1);
		System.out.println(c.contains(u2));
		//没有重写equals之前,false;重写equals后,ture
	}
}

2.2迭代器

Map集合中不能使用迭代器遍历/迭代,在所有Collection以及子类中使用

Collection c = new HashSet();
c.add("abc");
c.add("def");
c.add(100);
Iterator it = c.iterator
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值