Java读书笔记四(集合类)

 

 1.介绍

本篇博客阐述一下java中的集合类,在java集合中提供的主要的接口有6个,主要类有10个,详见下图。




 2.List接口及实现类操作

List接口继承自Collection接口,其中的元素可以按照索引的顺序访问,并且元素的顺序均是按照添加的先后顺序进行的。

1.ArrayList实现类:在开发中经常用到的集合类,可以向其中添加包括null值在内的所有对象引用型的元素,甚至可以搭建一个树形的结构。该类内部是依赖数组实现,因此对元素进行随机访问的性能很好。如果进行大量插入和删除操作,性能很差。

package com.Collection;

import java.util.ArrayList;

public class Sample14_4 {
	public static void main(String[] args) {
		// 创建列表ArrayList的对象
		ArrayList al = new ArrayList();
		
		// 初始化ArrayList对象中的元素
		for (int i = 0; i < 50; i++) {
			al.add(String.valueOf(i));
		}
		// 对ArrayList进行操作
		for (int i = 60; i < 75; i++) {
			al.set(i - 45, String.valueOf(i));
		}
		// 打印ArrayList列表中的内容
		System.out.println("这里是ArrayList操作后的结果:");
		System.out.println(al);
		// 取出指定索引的元素并处理
		Object o = al.get(22);
		String s = (String) o;
		System.out.println("索引为22的元素长度为:" + s.length());
	}
}


2.Vector向量类:性能特点与ArrayList基本上相同,不同的是该类的功能方法时同步的,同一时刻只能有一个线程访问。

3.LinkedList链接类:功能与上面两个相同,都是List的实现类,只不过其内部是通过依赖双链表来实现的,因此插入删除性能很好,但是随机访问性能不是很好。

package com.Collection;

import java.util.LinkedList;

public class Sample14_6 {
	public static void main(String[] args) {
		// 创建列表LinkedList类的对象
		LinkedList ll = new LinkedList();
		// 初始化LinkedList对象
		for (int i = 0; i < 50; i++) {
			ll.add(String.valueOf(i));
		}
		// 对LinkedList进行插入操作
		for (int i = 15; i < 30; i++) {
			ll.add(i, String.valueOf(30 - i + 15));
		}
		// 打印LinkedList列表
		System.out.println("这里是LinkedList操作后的结果:");
		System.out.println(ll);
	}
}


 3.Set接口及其实现类

Set接口也继承自Collection接口,与List接口不同的之处

1.Set集合中不能出现两个内容相同的对象引用.

2.Set中的元素没有顺序。

3.HashSet类:元素在其中存储不能保证任何顺序。可以向其中添加null值,但只能添加一次。

4.LinkedHashSet类:与HashSet功能相似,只不过采用了双链表的操作。

package com.Collection;

import java.util.LinkedHashSet;

public class Sample14_10 {
	public static void main(String[] args) {
		// 创建了LinkedHashSet对象
		LinkedHashSet lhs = new LinkedHashSet();
		// 向LinkedHashSet对象中依次添加了内容为5、1、3、2、4的字符串
		lhs.add(String.valueOf(5));
		lhs.add(String.valueOf(1));
		lhs.add(String.valueOf(3));
		lhs.add(String.valueOf(2));
		lhs.add(String.valueOf(4));
		// 移除了HashSet对象中内容为"5"的字符串
		lhs.remove(String.valueOf(5));
		// 将null值添加了进HashSet对象
		lhs.add(null);
		// 打印输出LinkedHashSet中的元素内容
		System.out.print("这里是LinkedHashSet操作后的结果:");
		System.out.println(lhs);
	}
}


5.SortedSet接口与TreeSet类

SortedSet接口继承了Set接口,该类中的元素是按照天然顺序进行自动排序的。其中TreeSet实现类中采用了二叉树的排序方式操作。

6.集合的遍历

迭代器操作:Collection  cset=new HashSet()   Iterator i1=cset.iterator()

for-each循环:HashSet hs=new HashSet    for(object o : hs){}


 4.Map映射集操作

实现了该接口的集合,都是以一种键值对的形式进行存储的,并且键对象在Map中是唯一标识,不允许重复出现。

1.HashMap类:是Map接口最常用的实现之一,该类的键值运行为null,但只能出现一次。

package com.Collection;

import java.util.*;
public class Sample14_16
{
     public static void main(String[] args)
     {
          //创建了HashMap对象
          HashMap hm=new HashMap();
          //向HashMap对象中添加内容不同的键值对
          hm.put(Integer.valueOf(97005),"Tom");
          hm.put(Integer.valueOf(97003),"Jerry");
          hm.put(Integer.valueOf(97004),"Lucy");
          hm.put(Integer.valueOf(97001),"Smith");
          hm.put(Integer.valueOf(97002),"Jc");
          System.out.print("这里是HashMap操作前的结果:");
          System.out.println(hm);
          //移除了HashMap对象中键为97001的值
          hm.remove(Integer.valueOf(97001));
          //替换键97002对应的值
          hm.put(Integer.valueOf(97002),"David");
          //打印输出HashMap中的内容
          System.out.print("这里是HashMap操作后的结果:");
          System.out.println(hm);
          //取出指定键对应的值
          Object o=hm.get(97003);//使用了自动打包功能
          String s=(String)o;
          System.out.println("键97003对应的值为:"+s+",长度为:"+s.length()+"。");
     }
}


2.HashTable类:与HashMap类相同,不同的是该类某一时刻只能有一个线程访问。

3.LinkedHashMap类:通过双链表的方式进行实现的Map,插入删除的效率比HashMap略差,遍历的效率比HashMap高。


 5.Collections工具类

在实际开发中经常需要对集合中的元素进行排序、搜索等操作,java中为我们提供了Collections工具类,该类提供的方法都是静态方法。

package com.Collection;

import java.util.*;
public class Sample14_27
{
     public static void main(String[] args)
     {
          //分别创建3个空的ArrayList对象
          List l1=new ArrayList();
          List l2=new ArrayList();
          List l3=new ArrayList();
          //对ArrayList对象l1与l2进行初始化操作
          for(int i=0;i<12;i++)
          {
               l1.add(Integer.valueOf(i));
               l2.add(Integer.valueOf(i+50));
          }
          //使用copy方法
          System.out.println("===================================copy"
          +"=====================================");
          System.out.println("方法使用前元素为:"+l1);
          Collections.copy(l1,l2);
          System.out.println("方法使用后元素为:"+l1);
          //使用disjoint方法
          System.out.println("==================================disjoint"+
          "==================================");
          if(!Collections.disjoint(l1,l2))
               System.out.println("列表l1与l2中有相同的元素!!!");
          System.out.println("====================================addAll"+
          "==================================");
          System.out.println("方法使用前元素为:"+l1);
          Collections.addAll(l1,new String[]{"tom","jc"});
          System.out.println("方法使用后元素为:"+l1);
          //使用fill方法
          System.out.println("=======================================fill"
          +"=================================");
          System.out.println("方法使用前元素为:"+l2);
          Collections.fill(l2,"0");
          System.out.println("方法使用后元素为:"+l2);
          //使用frequency方法
          System.out.println("=================================frequency"+
          "==================================");
          int i=Collections.frequency(l3,"0");
          System.out.println("l3中有元素'0' "+i+" 个!!!");
          //使用replaceAll方法
          System.out.println("=================================replaceAll"
          +"=================================");
          System.out.println("方法使用前元素为:"+l2);
          Collections.replaceAll(l2,"0","3");
          System.out.println("方法使用后元素为:"+l2);
          //使用reverse方法
          System.out.println("====================================reverse"
          +"=================================");
          System.out.println("方法使用前元素为:"+l1);
          Collections.reverse(l1);
          System.out.println("方法使用后元素为:"+l1);
          //使用rotate方法
          System.out.println("=====================================rotate"
          +"=================================");
          System.out.println("方法使用前元素为:"+l1);
          Collections.rotate(l1,6);
          System.out.println("方法使用后元素为:"+l1);
          //使用swap方法
          System.out.println("=======================================swap"+
          "==================================");
          System.out.println("方法使用前元素为:"+l1);
          Collections.swap(l1,6,10);
          System.out.println("方法使用后元素为:"+l1);     
     }
}


 6.小结

本篇博客主要阐述了java常用到的集合类,一般分为两种,一种是Collection类;一种是Map类;前者是依赖数组内部机制实现,后者是依赖键值对的形式实现。以后在开发过程中,根据自己的需要选择合适的集合类来使用。



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值