集合框架体系结构,list、set操作数据,泛型(一)
2017-07-31 16:59
176 查看
集合的概念
现实生活中:很多的事物凑在一起。
数学中的集合:具有共同属性的事物的总体。
Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象。
集合的作用
1.在类的内部,对数据进行组织。
2.简单而快速的搜索大数量的条目。
3.有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入/删除有关元素。
4.有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。
集合与数组的区别
数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
数组的长度固定,集合长度可变。
数组只能通过下标访问元素,下标的类型固定是整型,当不知道元素的位置时,需要遍历,而有的集合可以通过任意类型查找所映射的具体对象。
数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 只读方式来使用集合。该方法将返回一个集合的只读版本。
java集合框架的体系结构
由两大家族组成:
collection接口:是List、set、Queue接口的父接口,定义了可用于操作List、set、Queue的方法–增删改查。和Map接口
collection包括:
List:序列。常用的,存储的元素是排列有序的,并且可以重复,可以精确的控制每个元素的插入位置,或者删除某个位置元素。Arraylist:数组序列list的实现类,底层是由数组实现的。
Queue:队列。存储的元素是排列有序的,并且可以重复。LinkedList:链表,Queue的实现类,同时也是list的实现类
Set。集:常用的,存储的元素是排列无序的,并且不可以重复。如何区分是否重复:Set里的元素是不能重复的,那么用iterator()方法。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
HashSet:哈希集,Set的实现类
Map:重要的是HashMap实现类。
它们内部如何来存储对象,collection中存储的是一个一个的对象,Map:中运用
list操作数据
添加
注意:在添加到指定位置的方法要注意数组下标越界异常。
获得list中的元素
E get(int index):返回列表中指定位置的元素,index是位置,对象存入集合都变成Object类型,取出时需要类型转换。
遍历list
1.通过迭代器iterator,只是用来遍历集合中的元素,本身不具备任何存储元素的功能,它是依赖于某个集合存在的,不能独立存在是一个接口。
2.foreach:它是迭代器的简单写法
修改
E set(int index, E element):用指定元素替换列表中指定位置的元素。index方法索引位置,element要修改为的值。
删除
E remove(int index):移除列表中指定位置的元素。将所有的后续元素向左移动(将其索引减 1)。返回从列表中移除的元素。
boolean remove(Object o):从此列表中移除第一次出现的指定元素。
泛型
提出一个问题,给list中添加一个与之前添加的类型(课程)不同的类型,如String,在遍历时就会报错,原因是不能将String类型强转为课程类型。这时要考虑有没有什么方法可以控制往集合或list添加数据的类型,泛型就可以做到这一点。
集合中的元素,可以是任意类型的对象,其实就是对象的引用,如果把某个对象放入集合,则会忽略其类型,把它当作Object处理,泛型规定了某个集合只可以存放特定类型的对象,它会在编译期间进行类型检查,可以直接按指定类型获取集合元素,而不需要转型。
下面代码中<>中的内容就是泛型:
1.泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错!
如上面代码中泛型是Course,但添加的是String类型就会报如下错误:
2.泛型集合可以添加泛型的子类型的对象实例。
3.泛型集合中的限定类型不能使用基本类型,可以通过使用其对应的包装类存入基本数据类型。
4.在list的遍历中,带有泛型的与之前有所不同,每次循环的变量类型不在是Object。
与list操作数据的区别与联系
1.得到set里面的值,因为它是无序的,不能查询指定位置上的值,只能通过遍历的方式一个一个的显示出来,每次迭代出来的结果都是不一样的。
2.Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用), 并且,保留的是第一次添加的那一个。
3.添加,删除的方式都是一样的,都支持泛型。
现实生活中:很多的事物凑在一起。
数学中的集合:具有共同属性的事物的总体。
Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象。
集合的作用
1.在类的内部,对数据进行组织。
2.简单而快速的搜索大数量的条目。
3.有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入/删除有关元素。
4.有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。
集合与数组的区别
数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
数组的长度固定,集合长度可变。
数组只能通过下标访问元素,下标的类型固定是整型,当不知道元素的位置时,需要遍历,而有的集合可以通过任意类型查找所映射的具体对象。
数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 只读方式来使用集合。该方法将返回一个集合的只读版本。
java集合框架的体系结构
由两大家族组成:
collection接口:是List、set、Queue接口的父接口,定义了可用于操作List、set、Queue的方法–增删改查。和Map接口
collection包括:
List:序列。常用的,存储的元素是排列有序的,并且可以重复,可以精确的控制每个元素的插入位置,或者删除某个位置元素。Arraylist:数组序列list的实现类,底层是由数组实现的。
Queue:队列。存储的元素是排列有序的,并且可以重复。LinkedList:链表,Queue的实现类,同时也是list的实现类
Set。集:常用的,存储的元素是排列无序的,并且不可以重复。如何区分是否重复:Set里的元素是不能重复的,那么用iterator()方法。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
HashSet:哈希集,Set的实现类
Map:重要的是HashMap实现类。
它们内部如何来存储对象,collection中存储的是一个一个的对象,Map:中运用
<key,Value>键值对key和value可以是任意类型的对象,用两个对象,一个映射来存储对象。
list操作数据
添加
boolean add(E e):向列表的尾部添加指定的元素,e表示要添加的元素。
//创建list,以及要添加的元素 List coursesToSelect=new ArrayList(); Course cr1 = new Course("1" , "数据结构"); coursesToSelect.add(cr1);
void add(int index,E e):向列表的指定位置添加元素,index表示添加的位置,list的位置是从0开始的,e表示要添加的数据。将当前处于该位置的元素和所有后续元素向右移动。
coursesToSelect.add(0, cr1);
boolean addAll(Collection<? extends E> c):添加指定 collection 中的所有元素到此列表的结尾,新元素将按照它们通过指定 collection 的迭代器所返回的顺序出现在此列表中。
//要添加的内容,此处是一个数组 Course[] course = {new Course("3", "离散数学"), new Course("4", "汇编语言")}; //将数组转换为list之后再添加 coursesToSelect.addAll(Arrays.asList(course));
boolean addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素都插入到列表中的指定位置。将当前处于该位置的元素和所有后续元素向右移动。新元素将按照它们通过指定 collection 的迭代器所返回的顺序出现在此列表中。
注意:在添加到指定位置的方法要注意数组下标越界异常。
coursesToSelect.addAll(2, Arrays.asList(course));
获得list中的元素
E get(int index):返回列表中指定位置的元素,index是位置,对象存入集合都变成Object类型,取出时需要类型转换。
Course cr = (Course) coursesToSelect.get(i);
遍历list
1.通过迭代器iterator,只是用来遍历集合中的元素,本身不具备任何存储元素的功能,它是依赖于某个集合存在的,不能独立存在是一个接口。
//通过集合的iterator方法,取得迭代器的实例 Iterator<Course> it = coursesToSelect.iterator(); System.out.println("有如下课程待选(通过迭代器访问):"); while(it.hasNext()) { Course cr = it.next(); System.out.println("课程:" + cr.id + ":" + cr.name); }
2.foreach:它是迭代器的简单写法
for (Object obj : coursesToSelect) { Course cr = (Course) obj; System.out.println("课程:" + cr.id + ":" + cr.name); }
修改
E set(int index, E element):用指定元素替换列表中指定位置的元素。index方法索引位置,element要修改为的值。
coursesToSelect.set(4, new Course("7", "毛概"));
删除
E remove(int index):移除列表中指定位置的元素。将所有的后续元素向左移动(将其索引减 1)。返回从列表中移除的元素。
coursesToSelect.remove(4);
boolean remove(Object o):从此列表中移除第一次出现的指定元素。
Course cr = (Course) coursesToSelect.get(4); coursesToSelect.remove(cr);
boolean removeAll(Collection<?> c):列表中移除指定 collection 中包含的其所有元素。
Course[] courses = {(Course) coursesToSelect.get(4), (Course)coursesToSelect.get(5)}; coursesToSelect.removeAll(Arrays.asList(courses));
泛型
提出一个问题,给list中添加一个与之前添加的类型(课程)不同的类型,如String,在遍历时就会报错,原因是不能将String类型强转为课程类型。这时要考虑有没有什么方法可以控制往集合或list添加数据的类型,泛型就可以做到这一点。
集合中的元素,可以是任意类型的对象,其实就是对象的引用,如果把某个对象放入集合,则会忽略其类型,把它当作Object处理,泛型规定了某个集合只可以存放特定类型的对象,它会在编译期间进行类型检查,可以直接按指定类型获取集合元素,而不需要转型。
下面代码中<>中的内容就是泛型:
List<Course> courses = new ArrayList<Course>();
1.泛型集合中,不能添加泛型规定的类型及其子类型以外的对象,否则会报错!
courses.add("能否添加一些奇怪的东西呢??");
如上面代码中泛型是Course,但添加的是String类型就会报如下错误:
2.泛型集合可以添加泛型的子类型的对象实例。
3.泛型集合中的限定类型不能使用基本类型,可以通过使用其对应的包装类存入基本数据类型。
4.在list的遍历中,带有泛型的与之前有所不同,每次循环的变量类型不在是Object。
for (Course cr : courses) { System.out.println(cr.id + ":" + cr.name); }
与list操作数据的区别与联系
1.得到set里面的值,因为它是无序的,不能查询指定位置上的值,只能通过遍历的方式一个一个的显示出来,每次迭代出来的结果都是不一样的。
2.Set中,添加某个对象,无论添加多少次, 最终只会保留一个该对象(的引用), 并且,保留的是第一次添加的那一个。
3.添加,删除的方式都是一样的,都支持泛型。
相关文章推荐
- 集合框架 List,Set,Map和泛型
- 黑马程序员_java_集合框架_Collection_List_Set_Map_泛型
- 黑马程序员——Java基础——集合类、Collection、List体系、集合框架LinkedList操作等
- python基础数据结构——列表(list), 元祖(tuple), 字典(dict), 字符串(string), 集合(set) 介绍及相互转换
- 集合框架---使用LinkedList模拟一个堆栈或者队列数据结构
- 黑马程序员_java_集合框架_Collection_List_Set_泛型
- Java_List Set Map_集合框架 泛型
- JavaSE集合框架-01-集合框架体系及表数据结构
- Gson 解析Json结构,泛型转为List 集合会出现擦除数据的情况
- java学习日记_79:集合框架之数据结构的讲解和引出List子类的特点
- AdaultBird--我的黑马程序员之路!Chapter3---多线程同步,同步唤醒和等待,守护线程,String类,基本数据类型包装类,集合框架中的List和Set
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- Java基础(集合框架——Collection、List、Set、泛型)
- 十五、Java基础---------集合框架体系以及List
- 黑马程序员_毕向东JAVA基础_集合(2)Collection&&List&&Set&&泛型
- 集合框架(用LinkedList实现栈结构的集合代码)
- Java基础知识强化之集合框架笔记36:List练习之键盘录入多个数据在控制台输出最大值
- Python学习笔记-四类数据存储结构:list、tuple、dict以及set
- 集合框架复习之集合框架层次体系结构(一)
- Python基础数据结构之大循环(for list,set,dict,tuple)