java集合

什么是集合?

集合和数组非常类似,都是存储数据的一个容器

数组和集合的区别:

数组是定长,且只能存储相同类型的数据。

集合是变长,不仅可以存储相同数据而且可以存储不同类型的数据的容器。

备注:

和集合相关的类都需要导包。注意都是java.util下。

集合分为两大类:

1.单列集合(类似数组,只需要存值,通过下标访问值)

2.双列集合(类似对象,不仅需要存值,还要存与之对应的属性名,通过属性名访问属性值)

单列集合:

Collection就是所有单列集合的父接口

所有单列集合都实现了该接口,所以:所有单列集合都拥有共同的方法,学会了一种单列集合,其他的都可以依葫芦画瓢。

Collection又分为:

List子接口(内部元素:有序可以重复

Set子接口(内部元素:无序无法重复

List接口:

主要分为以下两个实现类:

ArrayList 集合:采用数组结构,元素增删慢,查找快,由于日常开发中使用最多的功能就是查询,所以 ArrayList 是最常用的集合之一。没有保证线程安全,但是效率高

Vector集合:保证了线程安全,但是效率较低。除此和ArrayList都一样。

LinkedList 集合:采用链表结构。元素增删快,但是查找慢

Ps:

线程安全:保证多个用户共同使用它也不会出错

数组结构:元素增删慢,查找快

链表结构:元素增删快,查找慢

Set接口:

特点1:单列集合 父类依然是Collection

特点2:无序无法重复

该接口下有一个常见类:HashSet

双列集合:

Map集合

分别存储    键理解为属性名  value属性值

键绝对是独一无二的   一般来说键:String   值:Object  

如何创建一个map:

Map<String,Object> map = new HashMap<String,Object>();
map的一些方法:

1.添加元素

map.put("1001", "张三1");

2.获取指定键 对应的值

System.out.println(map.get("1001"));//值为:张三1

3.获取长度

System.out.println(map.size());
4.如何遍历一个map集合
        //1.将其转成Set集合  
		Set<String> set = map.keySet();//将map集合中的键 全部转成set集合
		System.out.println(set);
		
		for(String s :set) {
			System.out.println(map.get(s));
		}

常见的集合:

1.ArrayList:

特点1:采用了数组结构:查询快。增删慢    

特点2:线程非安全所以效率快

特点3:有序且可以重复    

特点4:父类是List  祖父类:Collection

如何创建一个ArrayList :类似于多态:左边放父类 右边放子类

List  list = new ArrayList( );

2.Vector:

特点1:单列集合 父类是List 祖父类Collection

特点2:数组结构   

特点3:有序可重复   线程安全效率低

如何创建一个Vector

List list = new Vector( );

3.LinkedList:

特点1:父类都是List祖父类都是Collection有序 可重复

特点2:链表结构  增删快。查询慢

如何创建一个LinkedList

List list = new LinkedList( );

4.HashSet:

如何创建一个HashSet

Set<Object>  set = new HashSet<Object>( );
注意:

无序:如果存放的实体类,会出现一个BUG当某个实体类的属性完全一致,按理来说应该视为相同的值。但是set不会这么做。

解决办法:重写hashCode方法即可

hash:哈希  ,一种编码 , 每个对象都有一个独一无二的hash值 ,你就理解为键盘上的26个字母

Integer a = 123;
String b = "Nihao";
System.out.println(a.hashCode());
System.out.println(b.hashCode());

存在的意义:  判断对象是否相等

一般来说判断对象是否相等都是通过==  但是==获取的内存地址 效率较低

所以hashCode效率较高、  hashCode相等,则进一步判断内存地址   如果hashCode都不能则内存地址肯定不等。

一些常见的方法:

1.往集合尾部添加元素,一般不需要返回值

boolean add(Object o); 

2.往集合指定位置添加元素

void add(int index, Object o );
//例:
list.add(指定位置,值);

3.返回集合的长度

int size();

4.判断集合的内部是否为null 注意:并不是判断集合为空

boolean isEmpty();

5.判断集合内部是否存在该值

boolean contains(Object o);

6.删除集合指定的元素值

boolean remove(Object o);
//例:
System.out.println(list.remove(0));//根据下标删除
System.out.println(list.remove("jakc"));//根据指定内容删除

7.返回指定元素首次出现的位置。-1表示不存在

int indexOf(Object o);

8.判断两个集合是否   值和顺序都相等

boolean equals(Object o);
//注意:重写Object的equals方法

9.获取指定位置的元素

Object get(index);

如何遍历集合?

如果是List集合用普通for循环即可完成遍历

for(int i = 0;i < list.size();i++){

}

但如果是set集合由于没有下标,用增强for循环

for(Object o :set ) {
	System.out.println(o);
}

任何集合都可以通过额外一个知识点: Iterator(迭代器)

Iterator<Integer>  it = list.iterator();
		while(it.hasNext()) {//是否还有下一个元素
			if(it.next()==9999999) {
				
			}
		}

泛型: 

概念:就是每个集合后面跟着的 <E>   E表示这个集合应该存储什么类型的数据

集合:可以存放不同类型的。但是即使这样,你也要声明

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值