java-集合

一、集合的概念

现实生活中:很多的事物凑在一起;

数学中:具有共同属性的事物的总体;

Java中的集合类:是一种工具类,就像容器,储存任意数量的具有共同属性的对象。

二、集合的作用

1、在类的内部,对数据进行组织;

2、简单而快速的搜索大量数目的条目;

3、有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或删除有关元素;

4、有的集合接口,提供了映射关系,可以通过关键字key去快速查找对应的唯一对象,而这个关键字可以是任意类型;

三、集合与数组对比的优势

1、数组的长度固定,集合长度可变

2、数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的对象。

四、Java集合体系框架


(一)、Collection 接口,是List、Queue、Set接口的父接口,定义了可用于操作List、Set和Queue的方法(增删改查)。

1、List接口及实现类-ArrayList

      List是元素有序并且可以重复的集合,被称为序列;

      List可以精确控制每个元素的插入的位置或删除某个位置的元素;

      ArrayList:数组序列,是List集合中使用最高的实现类;底层是由数组实现的。

比较重要的方法:

add(),addAll();向集合添加元素

get();在集合中取出元素

remove();removeAll();删除指定元素

set();修改集合中的元素


注意:集合中的元素,可以是任意类型的对象(对象的引用),如果把某个对象放入集合,则会忽略它的类型,而把他当做Object处理。

例如:学生 选课系统

Course类:

package com.collection;

/**
 * 课程类
 * @author Timor
 *
 */

public class Course {
	public String id;
	public String name;
	
	public Course(String id,String name){
		this.id = id;
		this.name = name;
	}
}
Student类:

package com.collection;

import java.util.HashSet;
import java.util.Set;

/**
 * 学生类
 * @author Timor
 *
 */

public class Student {
	
	public String id;
	public String name;
	
	public Set courses;
	
	public Student(String id,String name){
		this.id = id;
		this.name = name;
		
		this.courses = new HashSet();
	}
}
初始化类:

package com.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * 备选课程类
 * 
 * @author Timor
 * 
 */

public class ListTest {
	public List coursesToSelect;

	public ListTest() {
		this.coursesToSelect = new ArrayList();
	}

	/*
	 * 用于往courseToSelect中添加备选课程
	 */

	public void testAdd() {
		// 创建一个课程对象,并通过add方法添加到备选课程list中
		Course c1 = new Course("1", "数据结构");
		coursesToSelect.add(c1);

		// 对象存入集合都会变成Object类型,取出时需要类型转换
		Course temp = (Course) coursesToSelect.get(0);

		System.out.println("添加课程:" + temp.id + ":" + temp.name);

		Course c2 = new Course("2", "Java");
		// 添加到指定的位置,如果超出集合长度,会报出数组下标越界异常
		coursesToSelect.add(0, c2);
		Course temp2 = (Course) coursesToSelect.get(0);

		System.out.println("添加课程:" + temp2.id + ":" + temp2.name);

		// 将指定 collection 中的所有元素都添加到此 collection 中
		Course[] course = { new Course("3", "Php"), new Course("4", "C语言") };
		coursesToSelect.addAll(Arrays.asList(course));
		Course temp3 = (Course) coursesToSelect.get(2);
		Course temp4 = (Course) coursesToSelect.get(3);
		System.out.println("再次添加课程:" + temp3.id + ":" + temp3.name);
		System.out.println("再次添加课程:" + temp4.id + ":" + temp4.name);

		// 将指定 collection 中的所有元素都添加到此 collection 指定的位置中
		Course[] course2 = { new Course("5", "高数"), new Course("6", "英语") };
		coursesToSelect.addAll(2, Arrays.asList(course2));
		Course temp5 = (Course) coursesToSelect.get(2);
		Course temp6 = (Course) coursesToSelect.get(3);
		System.out.println("AddAll二次添加课程:" + temp5.id + ":" + temp5.name);
		System.out.println("AddAll二次添加课程:" + temp6.id + ":" + temp6.name);

	}

	/**
	 * 取得List中的元素的方法
	 * 
	 */
	public void testGet(){
		//获取list的长度
		int size = coursesToSelect.size();
		System.out.println("有如下课程待选:");
		for(int i=0;i
   
   


四、泛型。

泛型规定了某个集合只可以存放特定类型的对象,会在编译期间进行类型检查,可以直接按指定类型获取集合元素。

泛型集合中不仅可以存放泛型类型的实例,也可以存放泛型的子类型。

泛型类:

package com.collection;

import java.util.ArrayList;
import java.util.List;


public class TestGeneric {
	/**
	 * 带有泛型---Course,的List的属性
	 * @author Timor
	 *
	 */
	public List
    
    
     
      courses;
	
	/**
	 * 重写构造器,初始化course泛型
	 */
	public TestGeneric(){
		this.courses = new ArrayList
     
     
      
      ();
	}
	
	/**
	 * 测试添加
	 * @param args
	 */
	public void testAdd(){
		Course course = new Course("1","Java");
		courses.add(course);
		
//		泛型集合中,不能添加泛型规定类型及其子类型之外的对象,否则报错。
//		courses.add("能否添加其他类型的数据");
		
		Course course2 = new Course("2","PHP");
		courses.add(course2);
	}
	
	/**
	 * 通过foreach访问
	 * @param args
	 */
	public void testForEach(){
		//泛型不用强转
		for(Course cr : courses){
			System.out.println(cr.id + ":" +cr.name);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TestGeneric tg = new TestGeneric();
		tg.testAdd();
		tg.testForEach();
	}

}

     
     
    
    




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值