JAVA集合笔记(自用)

JAVA集合
作用:对多个对象进行存储
1.集合和数组都是对多个数据进行存储操作的结构 简称 Java容器

2…1数组在存储多个数据方面的特点 :
1:一旦初始化以后 长度确定
2:需定义数组类型 如 String[] int [] 定义好之后只能存相应的数据类型

2.2 数组在存储多个数据方面的缺点:
1.一旦初始化以后,长度不可修改
2.数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便.效率不高。
3.获取数组中 实际元素的个数,没有现成的方法可用
4数组存储数据的特点:有序 可重复 。对于无序,不可重复的需求,不能满足

3 JAVA集合可分为Collection和Mapl两种体系、

Collection 接口 : 单列数据,定义了存取一组对象的方法的集合 包含
List :元素有序 可重复的集合(动态数组)→
ArrayList LinkdeList Vector

Set : 元素无序不可重复的集合(像高中学的那个集合)
HashSet LinkedHashSet TreeSet

Map接口 :双列数据 ,保存具有映射关系"key-value"对的集合 (像函数) y=f(x)
HashMap LinkedHashMap TreeMap HashTable Propertis

**4.**Collection 接口中的方法使用
(接口中的方法必须在它的实现类中用) 像Collection接口的实现类的对象中添加数据obj时 ,要求obj所在类要重写equals()
鼠标右键 source 中有快捷方式
add() 将元素添加到当前集合中 (object 类型)

size() 获取添加的元素个数
addAll(Collection coll1) 将coll1集合中的元素添加到当前的集合中

在这里插入图片描述
isEmpty () 判断当前元素是否为空(l里面的数据)
clear();清空集合元素chaji
contains(object obj) 判断当前集合中是否包含obj 判断的是内容 我们在判断时时会调用obj对象所在类的equals() .
containsAll(Collection coll1) 判断coll1中所有元素是否全在当前集合中 不重要的信息→ Collect c =Array…asList(123,456)
remove(Object obj ) 移除集合中的某个元素 布尔型 移除成功true 移除失败 false
remove(Collection coll1) 从当前集合中移除coll1中所有相同的元素 差集
retainAll(coll1) 取交集(修改当前集合)
**equals(Object obj)**判断两个集合中元素是否相同 顺序也得一样(因为刚刚造的对象时ArrayList 是有序的)
**hashCode()**返回当前对象的哈希值
toArrary把集合转换为数组 新建一个对象数组 Object [] o = coll1.toArrary();
iteratotr()返回迭代器Iterator接口的实例 用于遍历集合元素

//扩展 数组变集合 调用Arrays类的静态方法aList()
List list =Arrays.asList(new String []{“aa”,“bb”,“cc”})
基本数据类型的数组视为一个引用类型 int 类型的话 后面得用 new Integer

集合元素遍历 :

Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new person (“Jerry”,20));
coll.add(new String(“lll”) );
coll.add(false);

	   Iterator i =coll.iterator();
	    while(i.hasNext()){
	    	System.out.println(i.next());
	    }

 **错误 1!!!!** Iterator i =coll.iterator(); //第一次判断不为null的话指针下移 直接输出下一个数据
	    while(i.nex()!=null){
	    	System.out.println(i.next());
	    }这种情况会跳着输出
	    
错误2    这种情况时因为每次调用时都会生成一个全新的迭代器  指针放在第一个元素前 所以会循环输出集合中第一个元素
	    while(coll.iterator().hasNext)){
	    	System.out.println(i.next());
	    } 

——_
Iterator 中的 remove

删除集合中 TOM元素

   Iterator i =coll.iterator();
	    while(i.hasNext()){
	      Object obj =iterator.next(); //因为集合中存储的元素是对象 所以建一个object类型的来接收
	      if("Tom".equals(obj))
	      {
	      iterator.remove();
	      }
	    }

foreach 循环 增强For循环
for( 集合元素的类型 局部变量: 集合对象){}
for(Object obj :coll){
Syster.out.println(obj);
}
数组也可以使用
在这种循环中修改值 改变的只是 你声明的那个值 不会影响集合中的元素

List接口
ArrayList LinkedList Vector 三者的异同
同:三个类 都实现了List接口 ,存储数据的特点相同: 存储有序的 可重复的数据
不同 : ArrayList 线程不安全 效率高 Vector 线程安全 效率低 LinkedList对于频繁的插入删除 操作.使用此类效率比ArrayList高,其底层使用的是双向链表。

List接口常用方法 ArrayList l = new ArrayList();
1.Collection 当中定义的所有方法
2. add(int index,Object ele ): 在index位置插入ele元素
3.addall( int index,Collection else )从index位置 将else中所有元素加
4. get(int index ) 获取指定index位置的元素
5.indexOf(object obj ) 返回obj首次出现的位置 不存在返回-1
6 lastIndexOf(Object obj) 返回obj在当前集合中末次出现的位置
7.remove(int index) 移除指定index位置的元素,并返回此元素(可以设置变量接收删除的值obj)
8.set(int index,Object ele) 设置指定index位置的元素为ele
9.List subList(Int fromIndex,int toIndex) 返回从fromIndex到toIndex位置的左闭右开的子集合 LIst sublist =list.subListt(2,4)

总结 : 常用方法
增 :add(Object obj)
删 : remove ( int index) /remove(Object obj)
改 :set( int index ,objecrt ele)
查 :get(int index)
长度 : size()
遍历 I:teratot 增强for 循环 普通循环

Set接口 用的比较少 (Set接口中没有定义额外的新的方法,用的都是collection中的方法)
HashSet : 作为Set接口的主要实现类 线程不安全 可以存储null 值
LinkedHashSet 作为HashSet的子类 遍历其内部数据是 可以按照添加的顺序遍历
TreeSet 可以按照添加的对象的指定属性,进行排序。

1.无序性 不等于随机性 存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值
2.不可重复性 保证添加的元素按照equals()判断时,不能返回true 即相同的元素只能添加一个(重写equals hashCode)

Map接口
map :双列数据 存储key-value 对的数据

  HashMap   作为Map 的主要实现类  线程不安全 效率高  可以村塾null的key 和 valu
  
   LinkedHashMap : 保证在遍历map元素时,可以按照添加的顺序实现遍历 
   原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个 元素
   对于频繁的遍历操作,此类执效率高于HashMap
   
   TreeMap  保证按照添加的key-value对尽心排序,实现排序遍历    此时考虑key的自然排序或定制排序
   底层使用的是红黑树
   
   Hashtable    线程安全 效率低  不能存储null的key和value
   
   Properties  常用来处理配置文件。key和value都是String 类型

Map结构的理解
key 不能重复 无序的 使用set存储所有的key key所在的类要重写equals() 和 hashCode()(以HashMap为例)

value 无序的 可重复的 使用Collection存储所有的value value 所在类要重写equals()
一个键值对 key-value 构成了一个Entry对象

Map中的entry 无序的 不可重复的 使用set存储所有的entry

Map中定义的方法

添加删除修改的方法
object put ( object key, object value) 将指定key-value 添加到(或修改)当前map对象中 若key 已有value值 就是修改value值

void putAll(Map m) : 将 m中所有key-value存到当前map中

object remove (object key) 移除指定key 的key-value对 并返回value

void clear() 清空当前map 中所有数据

元素查询的操作

Object get (Object key) 获取指定key 对应的value

boolean containsKey(object key) 是否包含指定的key

boolean containsValue(object value) 是否包含指定的value

int size() 返回map 中 key-value 对的个数

boolean isEmpty() 判断当前map是否为空

boolean equals (object obj) 判断当前map和参数对象 obj是否相等

遍历
Set keySet() 返回所有key’构成的Set集合
Set set =map.keySet();
Iterator iterator = set.iterator()
while(iterator .hasNext()){
System.out,println(terator,next())
}

Collection values (); 返回value 构成的Collection 集合
Collection values =map.values();

Set entrySet() 返回所有key-value对构成的set集合

方式一: Set entrySet =map.entrySet();
Iterator iterator = set.iterator()
while(iterator .hasNext()){
Map.Entry entry = (Map.Entry) obj
System.out .println(evntry.getKey()+ entry.getValue())
}

方式二 可以用上面方法 自己拼凑一下

PropertiesTest 长用来处理配置文件(没看嘿嘿嘿)

Collection 工具类

Collections 操作Collection map 的工具类
常用方法
List list =new ArraryList()
Coollections.reverse(list)

reverse (List) 反转List 中元素的排序 倒序

shuffle(List) 对List 集合元素进行随机排序

sort(List) 根据有元素的自然顺序对指定List集合元素按升序排序

sort(List,Comparator) 根据指定的Comparator 产生的顺序对List 集合元素进行排序

swap (List ,int ,int ) 将指定list 集合中的i处元素和j处元素进行交换

Object max (Collection) 根据元素的自然顺序,返回给定集合中的最大元素

Object max (Collection, Comparator) 根据Comparator 指定的顺序 返回给定集合中 最大元素

Object min (Collection)

Object min (Collection, Comparator)

int frequency (Collection ,object) 换回指定和集合中指定元素的出现次数 int s =Collections.frequency(list,765)

void copy(List est ,List src) 将src中 的内容复制到dest 中

boolean replaceAll(List list,object oldVal,object new Val) 用新值替换

Collections 类中提供了多个synchronizedXxx()方法 该方法可使将指定集合包装成线程同步的集合 从而可以解决
多线程并发访问集合时的线程安全问题。

List list1 =Collections.synchronizedList(list); 此时返回的list1就是线程安全的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值