黑马程序员_集合之单列集合
来源:互联网 发布:好玩的app软件 编辑:程序博客网 时间:2024/06/06 07:30
------- android培训、java培训、期待与您交流!----------
为什么要有集合?
出现意义:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
集合与数组辨析
一.容器长度
1)集合长度可变
2)数组长度固定
二.存储内容类型
1)集合存储引用数据类型
2)数组存储任意类型
三.是否可存储不同类型数据
1)集合可以存储不同类型数据
2)数组只能存储相同数据类型
集合的概述
Java中的集合: JDK为我们提供了一套完整的容器类库,这些容器可以用于存储各种类型的对象,并且长度都是可变的,我们把这些类统称为集合类,它们都位于java.util包中。
分类:
单列集合Collection
List:元素有序、包含重复元素
Set:元素无序、不包含重复元素
双列集合Map:键值映射关系
其他功能接口
迭代器Iterator
Comparable与Comparator用于比较元素
一.Collection
单列集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
|--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
主要方法:
boolean add(E e) 添加元素 返回值类型表示:添加是否成功
boolean remove(Object o) 删除指定元素
size() 获取长度
contains()判断集合是否包含此对象
单列集合迭代器方法:
Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。迭代器:用来迭代的工具,用来遍历集合的工具。
迭代器的方法:
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
集合中存储的数据类型 next() 返回迭代的下一个元素。 默认是Object。
增加元素:
[java] view plaincopy
package cn.itcast2;
import java.util.ArrayList;
import java.util.Collection;
/*
* Collection类的方法: 此处以ArrayList作为子类对象
* 构造:使用子类对象
* 普通方法:
* boolean add(E e) 添加元素 返回值类型表示:添加是否成功
*/
public class Demo2 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//准备元素
int luckyNumber = 13;
String myWords = "休息时候十个小时都用到!";
Student s = new Student("刘亦菲",27);
//将元素放到集合中
c.add(luckyNumber);
c.add(myWords);
c.add(s);
//遍历集合
System.out.println(c);
}
使用迭代器遍历代码实现:
[java] view plaincopy
package cn.itcast2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 单列集合迭代器方法:
* Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。迭代器:用来迭代的工具,用来遍历集合的工具。
*
* 迭代器的方法:
* boolean hasNext() 如果仍有元素可以迭代,则返回 true。
* 集合中存储的数据类型 next() 返回迭代的下一个元素。 默认是Object。
*/
public class Demo7 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//准备元素对象
String name = "卢俊义";
String name2 = "宋江";
String name3 = "扈三娘";
String name4 = "孙二娘";
String name5 = "顾大嫂";
//将元素放入到集合
c.add(name);
c.add(name2);
c.add(name3);
c.add(name4);
c.add(name5);
//迭代集合(遍历集合)
//a:产生该集合的迭代器
Iterator i = c.iterator();
//b:调用迭代器的方法,遍历集合
while(i.hasNext()) {
Object next = i.next();
String sNext = (String)next;
System.out.println(sNext);
}
System.out.println("获取完了!");
}
}
两大子接口: List接口 Set接口
【List接口】
List接口的特点是:有序(获取顺序与存储方法一致),有索引,可有重复对象元素
常用方法(特点: 可以操作索引):
添加方法
void add(index, element)
void add(index, collection)
删除
Object remove(index)
获取
Object get(index) 可以不用迭代器获取元素, List特有
int IndexOf(Object) 通过内容返回索引。
int lastIndexOf(Object) 通过内容查找最后一次出现的索引
ListIterator<E> listIterator() 返回功能更强大的迭代器(通过List的特有迭代器完成并发的修改)
List接口实现类有:ArrayList, LinkedList, Vecter(被ArrayList替代)
增强for循环(foreach循环):
用于快速遍历集合或数组的方式
格式:
for (容器内类型 临时变量 : 被遍历的容器) {
使用临时的变量
}
增强for循环底层是迭代器的结构,所以在遍历过程当中不能添加元素。
即增强for循环就是用来遍历集合的,不能修改集合元素。
1.ArrayList实现类概述:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
代码请见(迭代器使用)
2.Vector:线程安全的,速度慢的(老的ArrayListt)实现类概述:
代码实现:
[java] view plaincopy
<strong>package cn.itcast;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
/*
* Vector:线程安全的,速度慢的,老的ArrayList
* 使用List存储人名,当人名为唐嫣时,将唐嫣改名为刘亦菲,并加入一个新的人名叫做戚薇
*/
public class Demo {
public static void main(String[] args) {
List list = new Vector();
//定义一个标志位
boolean b = false;
String name = "唐嫣";
String name2 = "刘菲";
String name3 = "胡斐";
String name4 = "苗人凤";
list.add(name);
list.add(name2);
list.add(name3);
list.add(name4);
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
String sName = (String) iterator.next();
if("唐嫣".equals(sName)) {
iterator.set("刘亦菲");
b = true;
}
}
if(b) {
list.add("戚薇");
}
System.out.println(list);
}
}</strong>
3.LinkedList: List的链表实现,提供了许多头尾操作
* public void addFirst(E e) 在集合头部添加元素
* public void addLast(E e) 在集合尾部添加元素
* public E getFirst() 获取头部元素
* public E getLast() 获取尾部元素
代码实现:
[java] view plaincopy
<strong>package cn.itcast;
import java.util.LinkedList;
/*
* LinkedList: List的链表实现,提供了许多头尾操作
* public void addFirst(E e) 在集合头部添加元素
* public void addLast(E e) 在集合尾部添加元素
* public E getFirst() 获取头部元素
* public E getLast() 获取尾部元素
*/
public class Demo3 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();
ll.add("石秀");
ll.add("时迁");
ll.add("石头");
System.out.println(ll);
ll.addFirst("石破天");
ll.addLast("史进");
for (Object s: ll) {
String s2 = (String)s;
System.out.println(s2);
}
System.out.println("==========================");
System.out.println(ll.getFirst());
System.out.println(ll.getLast());
}
}</strong>
【Set接口】
Set接口的特点是:无序(获取顺序与存储方法不一致),无索引,不可有重复对象元素
Set 接口中的方法与Collection中的方法一致。
实现类有:HashSet, TreeSet. LinkedHashSet 是HashSet的子类
HashSet代码实现:
[java] view plaincopy
package cn.itcast2;
import java.util.HashSet;
import java.util.Set;
/*
* Set集合:元素唯一,无序的集合
* 这里使用HashSet
*/
public class Demo {
public static void main(String[] args) {
//创建集合对象
Set set = new HashSet();
String name = "梅超风";
String name2 = "杨过";
String name3 = "小龙女";
//添加元素
set.add(name);
set.add(name2);
set.add(name3);
System.out.println(set);
}
}
LinkedHashSet代码实现
[java] view plaincopy
package cn.itcast2;
import java.util.Iterator;
import java.util.LinkedHashSet;
/*
* LinkedHashSet:存入的顺序与取出的顺序是一致的,相当于有序了。
*/
public class Demo3 {
public static void main(String[] args) {
LinkedHashSet lhs = new LinkedHashSet();
lhs.add("b许攸");
lhs.add("a曹操");
Iterator iterator = lhs.iterator();
while(iterator.hasNext()) {
Object next = iterator.next();
String s = (String)next;
System.out.println(s);
}
}
}
TreeSet代码实现:(如果要对自定义类型排序,就需要自然排序:Comparable或者比较器排序:Comparator
)
[java] view plaincopy
<strong>package cn.itcast2;
import java.util.TreeSet;
/*
* TreeSet:可以对集合中的元素进行排序
*
* String与Integer这样的元素,均因为实现了Comparable,具备了指定的比较规则。
*/
public class Demo4 {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
String name = "b黄月英";
String name2 = "a小乔";
ts.add(name);
ts.add(name2);
for(Object obj : ts) {
String s= (String)obj;
System.out.println(s);
}
}
为什么要有集合?
出现意义:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
集合与数组辨析
一.容器长度
1)集合长度可变
2)数组长度固定
二.存储内容类型
1)集合存储引用数据类型
2)数组存储任意类型
三.是否可存储不同类型数据
1)集合可以存储不同类型数据
2)数组只能存储相同数据类型
集合的概述
Java中的集合: JDK为我们提供了一套完整的容器类库,这些容器可以用于存储各种类型的对象,并且长度都是可变的,我们把这些类统称为集合类,它们都位于java.util包中。
分类:
单列集合Collection
List:元素有序、包含重复元素
Set:元素无序、不包含重复元素
双列集合Map:键值映射关系
其他功能接口
迭代器Iterator
Comparable与Comparator用于比较元素
一.Collection
单列集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
|--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
主要方法:
boolean add(E e) 添加元素 返回值类型表示:添加是否成功
boolean remove(Object o) 删除指定元素
size() 获取长度
contains()判断集合是否包含此对象
单列集合迭代器方法:
Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。迭代器:用来迭代的工具,用来遍历集合的工具。
迭代器的方法:
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
集合中存储的数据类型 next() 返回迭代的下一个元素。 默认是Object。
增加元素:
[java] view plaincopy
package cn.itcast2;
import java.util.ArrayList;
import java.util.Collection;
/*
* Collection类的方法: 此处以ArrayList作为子类对象
* 构造:使用子类对象
* 普通方法:
* boolean add(E e) 添加元素 返回值类型表示:添加是否成功
*/
public class Demo2 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//准备元素
int luckyNumber = 13;
String myWords = "休息时候十个小时都用到!";
Student s = new Student("刘亦菲",27);
//将元素放到集合中
c.add(luckyNumber);
c.add(myWords);
c.add(s);
//遍历集合
System.out.println(c);
}
使用迭代器遍历代码实现:
[java] view plaincopy
package cn.itcast2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 单列集合迭代器方法:
* Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。迭代器:用来迭代的工具,用来遍历集合的工具。
*
* 迭代器的方法:
* boolean hasNext() 如果仍有元素可以迭代,则返回 true。
* 集合中存储的数据类型 next() 返回迭代的下一个元素。 默认是Object。
*/
public class Demo7 {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
//准备元素对象
String name = "卢俊义";
String name2 = "宋江";
String name3 = "扈三娘";
String name4 = "孙二娘";
String name5 = "顾大嫂";
//将元素放入到集合
c.add(name);
c.add(name2);
c.add(name3);
c.add(name4);
c.add(name5);
//迭代集合(遍历集合)
//a:产生该集合的迭代器
Iterator i = c.iterator();
//b:调用迭代器的方法,遍历集合
while(i.hasNext()) {
Object next = i.next();
String sNext = (String)next;
System.out.println(sNext);
}
System.out.println("获取完了!");
}
}
两大子接口: List接口 Set接口
【List接口】
List接口的特点是:有序(获取顺序与存储方法一致),有索引,可有重复对象元素
常用方法(特点: 可以操作索引):
添加方法
void add(index, element)
void add(index, collection)
删除
Object remove(index)
获取
Object get(index) 可以不用迭代器获取元素, List特有
int IndexOf(Object) 通过内容返回索引。
int lastIndexOf(Object) 通过内容查找最后一次出现的索引
ListIterator<E> listIterator() 返回功能更强大的迭代器(通过List的特有迭代器完成并发的修改)
List接口实现类有:ArrayList, LinkedList, Vecter(被ArrayList替代)
增强for循环(foreach循环):
用于快速遍历集合或数组的方式
格式:
for (容器内类型 临时变量 : 被遍历的容器) {
使用临时的变量
}
增强for循环底层是迭代器的结构,所以在遍历过程当中不能添加元素。
即增强for循环就是用来遍历集合的,不能修改集合元素。
1.ArrayList实现类概述:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
代码请见(迭代器使用)
2.Vector:线程安全的,速度慢的(老的ArrayListt)实现类概述:
代码实现:
[java] view plaincopy
<strong>package cn.itcast;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
/*
* Vector:线程安全的,速度慢的,老的ArrayList
* 使用List存储人名,当人名为唐嫣时,将唐嫣改名为刘亦菲,并加入一个新的人名叫做戚薇
*/
public class Demo {
public static void main(String[] args) {
List list = new Vector();
//定义一个标志位
boolean b = false;
String name = "唐嫣";
String name2 = "刘菲";
String name3 = "胡斐";
String name4 = "苗人凤";
list.add(name);
list.add(name2);
list.add(name3);
list.add(name4);
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
String sName = (String) iterator.next();
if("唐嫣".equals(sName)) {
iterator.set("刘亦菲");
b = true;
}
}
if(b) {
list.add("戚薇");
}
System.out.println(list);
}
}</strong>
3.LinkedList: List的链表实现,提供了许多头尾操作
* public void addFirst(E e) 在集合头部添加元素
* public void addLast(E e) 在集合尾部添加元素
* public E getFirst() 获取头部元素
* public E getLast() 获取尾部元素
代码实现:
[java] view plaincopy
<strong>package cn.itcast;
import java.util.LinkedList;
/*
* LinkedList: List的链表实现,提供了许多头尾操作
* public void addFirst(E e) 在集合头部添加元素
* public void addLast(E e) 在集合尾部添加元素
* public E getFirst() 获取头部元素
* public E getLast() 获取尾部元素
*/
public class Demo3 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();
ll.add("石秀");
ll.add("时迁");
ll.add("石头");
System.out.println(ll);
ll.addFirst("石破天");
ll.addLast("史进");
for (Object s: ll) {
String s2 = (String)s;
System.out.println(s2);
}
System.out.println("==========================");
System.out.println(ll.getFirst());
System.out.println(ll.getLast());
}
}</strong>
【Set接口】
Set接口的特点是:无序(获取顺序与存储方法不一致),无索引,不可有重复对象元素
Set 接口中的方法与Collection中的方法一致。
实现类有:HashSet, TreeSet. LinkedHashSet 是HashSet的子类
HashSet代码实现:
[java] view plaincopy
package cn.itcast2;
import java.util.HashSet;
import java.util.Set;
/*
* Set集合:元素唯一,无序的集合
* 这里使用HashSet
*/
public class Demo {
public static void main(String[] args) {
//创建集合对象
Set set = new HashSet();
String name = "梅超风";
String name2 = "杨过";
String name3 = "小龙女";
//添加元素
set.add(name);
set.add(name2);
set.add(name3);
System.out.println(set);
}
}
LinkedHashSet代码实现
[java] view plaincopy
package cn.itcast2;
import java.util.Iterator;
import java.util.LinkedHashSet;
/*
* LinkedHashSet:存入的顺序与取出的顺序是一致的,相当于有序了。
*/
public class Demo3 {
public static void main(String[] args) {
LinkedHashSet lhs = new LinkedHashSet();
lhs.add("b许攸");
lhs.add("a曹操");
Iterator iterator = lhs.iterator();
while(iterator.hasNext()) {
Object next = iterator.next();
String s = (String)next;
System.out.println(s);
}
}
}
TreeSet代码实现:(如果要对自定义类型排序,就需要自然排序:Comparable或者比较器排序:Comparator
)
[java] view plaincopy
<strong>package cn.itcast2;
import java.util.TreeSet;
/*
* TreeSet:可以对集合中的元素进行排序
*
* String与Integer这样的元素,均因为实现了Comparable,具备了指定的比较规则。
*/
public class Demo4 {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
String name = "b黄月英";
String name2 = "a小乔";
ts.add(name);
ts.add(name2);
for(Object obj : ts) {
String s= (String)obj;
System.out.println(s);
}
}
}</strong>
版权声明:本文为博主原创文章,未经博主允许不得转载。
0 0
- 黑马程序员_集合之单列集合
- 黑马程序员_集合_单列集合
- 黑马程序员_集合框架(上)-单列集合类
- 黑马程序员——Collection单列集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- 黑马程序员_集合
- hihoCoder 1236 Scores(2015北京赛区网络赛)
- Head First 设计模式 阅读笔记(一)
- 点击启动图标如何定位到App上次打开的页面
- Win7下IDEA搭建Spark源代码阅读环境。
- IOS UIWebView请求https站点及html页面内部ajax请求 对https的支持
- 黑马程序员_集合之单列集合
- JQGrid 学习
- iOS开发——用keychain来保存更隐秘的数据
- OOM出现情况
- VIM 复制粘贴小结
- Cache数据库的M语言之把图片转成Base64
- 二叉树递归遍历和非递归遍历
- Android异常捕获防止崩溃弹框
- struts2学习