020 Java 集合

1.集合Collection:是指可以存储一组数据的数据结构,集合是一个接口,其定义了丰富的方法。

1.1List和Set:在实际的开发中,要将使用对象存储于特定的数据结构,java提供的容器为:集合。集合是一个接口,定义了集合的相关操作方法,其有两个子接口。:List和Set

比较两个子接口需要看看集合中的元素需不需要重复。

当集合中的元素可以重复时,使用List

                                                                  元素是否可以重复,取决于equals比较的结果,因而要在类中重写equals方法

当集合中的元素不可以重复时,使用Set

1.2集合持有对象的饮用:集合中存储的都是引用类型元素,就是指集合中知道村对象的引用,而并非把元素对象本身存入在集合中,如图下:

         

:由上图得,集合中存储的对象的引用,即元素对象的地址

如下代码:     

         /*
	 * 集合持有对象的引用
	 */
	
	public void testRef(){
		Collection<Cell>cells=new ArrayList<Cell>();
		cells.add(new Cell(1,2));
		Cell cell=new Cell(2,3);
		cells.add(cell);
		System.out.println(cell);
		//输出结果:(2,3)
		System.out.println(cells);
		//输出结果:[(1,2), (2,3)]
		cell.drop();
		System.out.println(cells);
		//输出结果:[1,2, 3,3]
	}
有上述代码可知,当对象本身发生改变时,集合中因存储的是元素对象的引用,因此输出的集合也发生了改变


1.3add方法:指向集合中添加新元素,格式如下:

boolean add(E e):当向集合中添加元素成功时,返回true,否则返回false

代码如下:

	/*
	 * 测试add方法
	 */
	@Test
	public void testAdd(){
		Collection<String> c=new ArrayList<String>();
		c.add("a");
		c.add("b");
		c.add("c");
		System.out.println(c);
		//输出结果为:[a, b, c]
	}

从输出结果可以知道,向集合c添加元素成功

1.4contains方法:判断给定的元素是否包含在集合中,若包含返回true,若不包含,返回false。格式如下:

boolean contains(Object o)

注意:集合中是否包含元素是根据每个元素的equals方法进行比较,因此要必须重写equals方法进行比较后的结果。代码如下

         /*
	 * 测试contains方法
	 */
	@Test
	public void testContains(){
		Collection<Cell> c=new ArrayList<Cell>();
		c.add(new Cell(1,2));
		c.add(new Cell(1,3));
		c.add(new Cell(2,2));
		c.add(new Cell(2,3));
		Cell cell=new Cell(1,3);
		boolean blag=c.contains(cell);
		System.out.println(blag);
		//输出结果:true
	}
	
由上述代码可以看出cell包含在集合中

1.5size、clear、isEmpty,

int size();该方法用于返回集合中元素的个数

void clear():该方法用于清空当前集合

boolean isEmpty():该方法用与判断集合是否不包含任何元素。若不包含任何元素,则返回true,否则false

代码如下:

         /*
	 * 测试size、clear、isRmpty方法
	 */
	@Test
	public void testSizeAndClearAndIsEmpty(){
		Collection<String>c=new ArrayList<String>();
		System.out.println(c.isEmpty());
		//输出结果:true
		c.add("java");
		c.add("cpp");
		c.add("php");
		c.add("c#");
		c.add("Object-c");
		System.out.println("isEmpty:"+c.isEmpty()+" size:"+c.size());
		//isEmpty:false size:5
		c.clear();
		System.out.println("isEmpty:"+c.isEmpty()+" size:"+c.size());
        //isEmpty:true size:0
		
	}
1.6 addAll和containsAll方法

addAll:是指对该方法传入一个集合,并将该集合中的所有元素添加到当期那集合中。格式如下:

boolean addAll(Collection< ? extends E> c):若给定集合由于调用而发生更改,则返回true

Boolean containsAll(Collection <>)


   <pre name="code" class="java">	/*
	 * 用于测试addAll方法和containsAll方法
	 */
	@Test
	public void testAddAllAndContainsAll(){
		Collection<String>c1=new ArrayList<String>();
		c1.add("java");
		c1.add("cpp");
		c1.add("php");
		c1.add("c#");
		c1.add("object-c");
		System.out.println(c1);
		//输出结果为:[java, cpp, php, c#, object-c]
		Collection<String>c2=new HashSet<String>();
		c2.addAll(c1);
		System.out.println(c2);
		//输出结果为:[c#, object-c, cpp, java, php]
		Collection<String>c3=new ArrayList<String>();
		c3.add("java");
		c3.add("cpp");
		System.out.println(c1.containsAll(c3));
		//输出结果为:true
		
	}

 

2.Iterator:迭代器,用于遍历集合中的所有元素。

2.1 hasNext、Next方法

迭代器定义方法:Iterator iterator()

迭代器Iterator是一个接口,迭代器在重写Collection的iterator方法,利用内部类提供了迭代器的实现

迭代器提供了同意遍历元素的集合方式,提供了遍历集合两个方法

boolean hasNext():判断集合中是否还有元素可以遍历

E next():返回迭代的下一个元素。代码如下:

/*
	 * 测试iterator的hasNext和Next方法
	 */
	@Test
	public void testHasNextAndNext(){
		Collection<String>c=new ArrayList<String>();
		c.add("java");
		c.add("cpp");
		c.add("php");
		c.add("c#");
		c.add("object-c");
		System.out.println(c);
		//输出结果:[java, cpp, php, c#, object-c]
		
		Iterator<String>it=c.iterator();
		while(it.hasNext()){
			String str=it.next();
			System.out.print(str+" ");
			//输出结果:java cpp php c# object-c 
		}
	}

2.2 remove方法:使用迭代器遍历集合中时,不能通过集合的remove删除集合元素,否则会抛出异常,我们可以使用迭代器的remove方法,来删除next()迭代出的元素,如下代码:

<pre name="code" class="java">/*
	 * 测试Iterator的remove方法
	 */
	@Test
	public void testRemove(){
		Collection<String>c=new ArrayList<String>();
		c.add("java");
		c.add("cpp");
		c.add("php");
		c.add("c#");
		c.add("object-c");
		System.out.println(c);
		//输出结果:[java, cpp, php, c#, object-c]
		Iterator<String>it=c.iterator();
		while(it.hasNext()){
			String str=it.next();
			if(str.indexOf("c")!=-1){
				it.remove();
			}
		}
		System.out.println(c);
		//输出结果为:[java, php]
	}


 

2.3增强型for循环:java5.0推出一个新的特性,称为增强for循环,也成为新循环,该循环不通用于传统循环工作,其只用于遍历集合或数组。

语法:for(元素类型 e:集合或数组){

循环体;

}

注意:新循环并非新的语法,而是在编译过程中,编译器会将新循环转换为迭代器模式,新循环的本质就是迭代器。代码如下:

         /*
	 * 测试foreach方法
	 */
	@Test
	public void testForeach(){
		Collection<String>c=new ArrayList<String>();
		c.add("java");
		c.add("cpp");
		c.add("php");
		c.add("c#");
		c.add("object-c");
		System.out.println(c);
		//输出结果:[java, cpp, php, c#, object-c]
		for(String str:c){
			System.out.print(str.toUpperCase()+" ");
		}
		//输出结果:JAVA CPP PHP C# OBJECT-C 
	}

3.泛型机制

泛型机制是java SE 5.0引入的特性,泛型的本质是参数化类型

在类、接口和方法中的定义过程中,所操作的类型被传入的参数指定。

java泛型机制广泛的运用于集合的框架中,所有的集合类型都带有泛型参数,这样就可以在创建集合中放入指定类型的元素。java编译器可以根据此进行类型检查。这样可以减少代码在运行时出现错误地可能性。

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值