JAVA中的ArrayList容器和HashSet容器

本文探讨了Java中ArrayList和HashSet容器的使用。ArrayList作为实现可变大小数组的类,提供了常数时间的size、isEmpty和get、set操作,但add操作为分摊常数时间。它不是线程安全的。另一方面,HashSet是一个不包含重复元素的集合,非同步,允许null值。Java容器类还包括其他如List、LinkedList、Vector以及Map、HashTable、HashMap等,它们各自有不同的特性和使用场景。
摘要由CSDN通过智能技术生成

Java的独特的使用性

  1. Java是一个面向对象的语言。对我来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。了解类的使用这很重要。
  2. Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
  3. Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
    网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运,这是我对Java印象最深的地方。

Java中的容器

  • 容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
  • 容器类:ArrayList = new ArrayList;用来存放对象
    容器类有两个类型:1容器类型ArrayList2元素类型
    系统中的类库很重要,且效率也很高
  • 所谓容器,就是“放东西的东西”。数组可以看作是一种容器,但是数组的元素个数一旦确定就无法改变,这在实际使用中是很大的不足。一般意义上的容器,是指具有自动增长容量能力的存放数据的一种数据结构。在面向对象语言中,这种数据结构本身表达为一个对象。所以才有“放东西的东西”的说法。
import java.util.ArrayList;             //引入一个Arraylist类在包java.util中,用来存储String的范型类,范型类也是一种容器
import java.util.HashSet;
class Value
{
	private int i;
	public void set(int i) { this.i= i;}
	public int get() {return i;}
	public String toString() {return " "+i;}      //去产生一个
}

public class Notebook {
	//定义接口
	private ArrayList<String>note = new ArrayList<String>();         //定义一个成员变量note
	
	public void add(String s)                       //定义一个接口函数add添加对数据的收集
	{
		note.add(s);                                //add函数中的数据元素类型是字符串String
	}
	
	public void add(String s,int loction)           //在数据中的某个位置中添加数据
	{
		note.add(loction, s);
	}
	public int getSize()                            //
	{
		return note.size();                         //用note变量直接调用ArrayList类(容器)中的size,来判断里面放了多少
	}
	
	public String getNote(int index)                //获得其中的一条数据并返回
	{
		return note.get(index);
	}
	public void removeNote(int index)            //删除一条记录,无返回
	{
		 note.remove(index);
	}
	
	public String[] list()                          //获得所有的数据记录的列表
	{
		int[] ia = new int [10];
		String[] a = new String[note.size()];       //先创建一个数组,来反映整个容器中的数据
//			for(int i=0;i<note.size();i++) 
//			{
//				a[i] = note.get(i);
//			}
		note.toArray(a);                          //系统类库中的toArry()可以自动做循环遍历数组替代for循环
		return a;
	}

Java内部容器类

  • Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset等
  • ArrayList和HashMap是异步的,Vector和Hashtable是同步的,所以Vector和Hashtable是线程安全的,而ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和Hashtable的执行效率要低于 ArrayList和HashMap。
  • 当然在这里我只讨论ArrayList和HashSet的用法
  • ├List 接口
    │├LinkedList链表
    │├ArrayList顺序结构动态数组类
    │└Vector 向量
    │ └Stack 栈
    ├Set
    │├HashSet
    │├TreeSet
    │└LinkedHashSet
public static void main(String[] args) {
		// TODO Auto-generated method stub
		Value v = new Value();
		v.set(10);
		System.out.println(v);
		ArrayList<String> a = new ArrayList<String>();
		a.add("first");
		a.add("second");
		a.add("first");
//		for(String s : a)                //对于容器类for each循环是一个不错的选择
//		{
//			System.out.println(s);
//		}
		System.out.println(a);
		System.out.println("************");
		HashSet<String> s = new HashSet<String>(); //这个set就是数学中的set中的集合,集合中没有重复的元素
		s.add("first");
		s.add("second");
		s.add("first");
		System.out.println(s);

创建对象还是有很多的动作操作

            Notebook nb = new Notebook();              //创建操作对象nb基于类Notebook
			nb.add("first");                           //开始存放
			nb.add("second");
			nb.add("thired", 1);                       //插入什么数据在多少行
			nb.removeNote(1);
			System.out.println(nb.getSize());            //输出在size中存放了的多少条数据
			System.out.println(nb.getNote(0));           //输出在多少行的数据是什么
			System.out.println(nb.getNote(1));
			String[] a = nb.list();
			for(String s : a )                          //列表中的数据循环遍历数组
			{
				System.out.println(s);
			}
		
	}

}

每一种容器和接口 都存在着一些差异

比如说:

  1. ArrayList类
    ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
  2. HashMap类
    HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的容量成比例。

Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值