RE:JAVA学习-集合操作
2017-08-23 21:05
267 查看
1.Iterator:迭代器
1.1 作用:对collection集合进行迭代(遍历集合)
Collection c = new HashSet();
Iterator it= c.iterator();
1.2 hasNext方法: boolean hasNext()判断集合是否还有元素可以遍历
1.3 E next() 返回迭代的下一个元素
遍历集合:
while(it.hasNext()){
String str=it.next();
System.out.println(str);
}
在进行迭代时不能对集合c进行操作
1.4 void remove() 在原集合中删除元素
注意:在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素。(并且不能再次调用remove方法,除非再调用next()后才可再次调用)
删除:
while (it.hasNext()) {
String str = it.next();
if (str.indexOf(‘c’) != -1) {
it.remove();
}
}
2.增强for循环(jdk1.5特性 本质上是迭代器)
2.1 语法:for(元素类型 e: 集合或数组){
循环体
}
for (String str : c) {
System.out.print(str.toUpperCase() + ” “);
}
在进行循环的时候不能对集合c进行操作
3.泛型(jdk1.5特性 本质:参数化类型)
3.1 定义:在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定
3.2 应用:在创建对象时可以将该类型作为参数传递(如:ArrayList E为泛型参数)
所有的集合类型都带有泛型参数,这样在创建集合时可以指定放入集合中的对象类型
4.List(可重复集) 是Collection的字接口,用于定义线性表数据结构
4.1 ArrayList和LinkedList(List的两个实现类)(方法逻辑上基本一样)
ArrayList更适合于随机访问而LinkedList更适合于插入和删除
4.2 E get(int index) 获取集合中指定下标对应的元素(从0开始)
E set(int index,E element) 将给定的元素存入给定位置,并将原位置的元素返回
4.3 void add(int index,E element) 将给定的元素插入到指定位置(原位置及后续元素都顺序向后移动)–注意区分 void add(E element) 添加元素方法
E remove(int index) 删除给定位置的元素,并将被删除的元素返回
4.4 List subList(int fromIndex,int toIndex)
截取下标从fromIndex到toIndex(含头不含尾)
注意:subList获取的List与原List占有相同的存储空间,对子List的操作会影响原List
可以用截取子集合并使用clear方法来清楚List中的一段元素
// 可以用于删除连续元素
list.subList(3, 8).clear();
System.out.println(list);
4.5 转换为数组
两种方法:
Object[] toArray()
T[] toArray(T[]a)
5.Collections 集合工具类(是一个辅助类,为集合提供排序 线程安全)
5.1 void sort(List list) 对给定的集合元素进行自然排序
Collections.sort(list)
5.2 Comparable 接口
作用:在使用Collections的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示其子类是可比较的。
实现接口时要重写一个抽象方法:
int compareTo(T t);
返回值表示大小 >0 则当前对象大于给定对象 其他同理
5.3 Comparator
临时指定比较规则
实现
int compare(T o1,T o2)
返回值表示大小 >0 则o1>o2 其他同理
6.队列和栈(主要写的是队列)
队列 先进先出(FIFO first in first out)
栈 先进后出(FILO first in last out)
Queue队列:
6.1创建:Queue queue = new LinkedList();
6.2主要方法:
boolean offer 将一个对象添加至队尾(添加成功返回true)
E poll() 从队首删除并返回一个元素
E peek() 返回队首元素(但不删除)
Deque双端队列(从队列的两端分别可以入队和出队操作)double ended queue
限制Deque只能从一端出入,则可实现 栈(Stack)
1.1 作用:对collection集合进行迭代(遍历集合)
Collection c = new HashSet();
Iterator it= c.iterator();
public class Collection_iterator { public static void main(String[] args) { Collection c=new HashSet(); c.add("one"); c.add("#"); c.add("two"); c.add("#"); c.add("three"); c.add("#"); c.add("four"); c.add("#"); System.out.println(c);//[two, #, one, three, four] Iterator it=c.iterator(); while(it.hasNext()){ String str=(String)it.next(); System.out.println(str); if("#".equals(str)){ /* * 使用迭代器遍历集合的过程中 * 不能通过集合的方法增删元素 * 否则迭代器在下次遍历元素时 * 会抛出异常.可以通过迭代器 * 提供的remove方法删除通过next * 获取的元素 */ // c.remove(str); it.remove(); } } System.out.println(c);//[two, one, three, four] } }
1.2 hasNext方法: boolean hasNext()判断集合是否还有元素可以遍历
public class NewForDemo2 { public static void main(String[] args) { Coll 4000 ection c=new ArrayList(); c.add("one"); c.add("#"); c.add("two"); c.add("#"); c.add("three"); c.add("#"); c.add("four"); c.add("#"); System.out.println(c); /* * 新循环并非新的语法,这是编译器认可而非虚拟机 * 认可的 * 编译器在编译源代码时发现使用新循环遍历集合时 * 会将代码改变为使用迭代器遍历 * 所以要注意,使用新循环遍历集合时不要使用集合 * 的方法修改元素 */ for(Object o:c){ String str=(String)o; System.out.println(str); if(str.equals("#")){ // c.remove(str); } } } }
1.3 E next() 返回迭代的下一个元素
遍历集合:
while(it.hasNext()){
String str=it.next();
System.out.println(str);
}
在进行迭代时不能对集合c进行操作
1.4 void remove() 在原集合中删除元素
注意:在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素。(并且不能再次调用remove方法,除非再调用next()后才可再次调用)
删除:
while (it.hasNext()) {
String str = it.next();
if (str.indexOf(‘c’) != -1) {
it.remove();
}
}
2.增强for循环(jdk1.5特性 本质上是迭代器)
2.1 语法:for(元素类型 e: 集合或数组){
循环体
}
for (String str : c) {
System.out.print(str.toUpperCase() + ” “);
}
在进行循环的时候不能对集合c进行操作
3.泛型(jdk1.5特性 本质:参数化类型)
3.1 定义:在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定
3.2 应用:在创建对象时可以将该类型作为参数传递(如:ArrayList E为泛型参数)
所有的集合类型都带有泛型参数,这样在创建集合时可以指定放入集合中的对象类型
4.List(可重复集) 是Collection的字接口,用于定义线性表数据结构
4.1 ArrayList和LinkedList(List的两个实现类)(方法逻辑上基本一样)
ArrayList更适合于随机访问而LinkedList更适合于插入和删除
4.2 E get(int index) 获取集合中指定下标对应的元素(从0开始)
E set(int index,E element) 将给定的元素存入给定位置,并将原位置的元素返回
4.3 void add(int index,E element) 将给定的元素插入到指定位置(原位置及后续元素都顺序向后移动)–注意区分 void add(E element) 添加元素方法
E remove(int index) 删除给定位置的元素,并将被删除的元素返回
4.4 List subList(int fromIndex,int toIndex)
截取下标从fromIndex到toIndex(含头不含尾)
注意:subList获取的List与原List占有相同的存储空间,对子List的操作会影响原List
public void testSubList() { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } System.out.println(list); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] List<Integer> subList = list.subList(3, 8); System.out.println(subList); // [3, 4, 5, 6, 7] // subList获得的List和源List占有相同的数据空间 for (int i = 0; i < subList.size(); i++) { subList.set(i, subList.get(i) * 10); } System.out.println(subList); // [30, 40, 50, 60, 70] System.out.println(list); // [0, 1, 2, 30, 40, 50, 60, 70, 8, 9] }
可以用截取子集合并使用clear方法来清楚List中的一段元素
// 可以用于删除连续元素
list.subList(3, 8).clear();
System.out.println(list);
4.5 转换为数组
两种方法:
Object[] toArray()
T[] toArray(T[]a)
List<String> list=new ArrayList<String>(); list.add("aa"); ... String[] str=list.toArray(new String[] {}); 4.6 数组转换为List (Arrays类中提供的一个静态方法asList) static <T>List<T> asList<T...a> 返回的List的集合元素类型由传入的数组的元素类型决定 注意:返回的集合不能对其增删元素,否则会抛出异常。并且对集合的元素进行修改会影响数组对应的元素。 List<String> list = Arrays.asList(strArr);
5.Collections 集合工具类(是一个辅助类,为集合提供排序 线程安全)
5.1 void sort(List list) 对给定的集合元素进行自然排序
Collections.sort(list)
public class SortListDemo1 { public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); Random random=new Random(); for(int i=0;i<10;i++){ list.add(random.nextInt(100)); } System.out.println(list); Collections.sort(list); System.out.println(); } }
5.2 Comparable 接口
作用:在使用Collections的sort排序的集合元素都必须是Comparable接口的实现类,该接口表示其子类是可比较的。
实现接口时要重写一个抽象方法:
int compareTo(T t);
返回值表示大小 >0 则当前对象大于给定对象 其他同理
public class Point implements Comparable<Point>{ private int x; private int y; /** * @param x * @param y */ public Point(int x, int y) { super(); this.x = x; this.y = y; } public Point(){ } public String toString(){ return "("+x+","+y+")"; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } /* * 实现Comparable接口后必须重写方法compareTo * 该方法的作用是定义当前对象this与参数对象o之间 * 比较大小的规则 * 返回值不关注具体取值,只关注取值范围 * 当返回值>0 当前对象this大于参数对象o(this>o) * 当返回值<0 this<o * 当返回值=0 this=o * */ public int compareTo(Point o) { int len=this.x*this.x+this.y*this.y; int olen=o.x*o.x+o.y*o.y; return len-olen; } }
//测试 public class SortListDemo2 { public static void main(String[] args) { List<Point> list=new ArrayList<Point>(); list.add(new Point(3,4)); list.add(new Point(1,4)); list.add(new Point(4,4)); list.add(new Point(5,2)); list.add(new Point(3,1)); list.add(new Point(6,3)); System.out.println(list); /* * sort方法要求集合元素必须实现Comparable接口 * 否则无法排序 */ Collections.sort(list); System.out.println(list); } }
5.3 Comparator
临时指定比较规则
实现
int compare(T o1,T o2)
返回值表示大小 >0 则o1>o2 其他同理
public class SortListDemo3 { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("祈求者"); list.add("主宰"); list.add("暗影恶魔"); System.out.println(list); /* * Collections提供了一个重载的sort方法 * static void sort(List,Comparator) * 该方法要求额外传入一个比较器,然后使用这个 * 比较器定义的规则比较集合元素并进行自然排序 * 使用该方法时,sort不要求集合元素必须实现 * Comparable接口了(因为不用元素自身的比较规则) */ Collections.sort(list,new Comparator<String>(){ public int compare(String o1,String o2){ return o1.length()-o2.length(); } }); System.out.println(list); } }
6.队列和栈(主要写的是队列)
队列 先进先出(FIFO first in first out)
栈 先进后出(FILO first in last out)
Queue队列:
6.1创建:Queue queue = new LinkedList();
6.2主要方法:
boolean offer 将一个对象添加至队尾(添加成功返回true)
E poll() 从队首删除并返回一个元素
E peek() 返回队首元素(但不删除)
Deque双端队列(从队列的两端分别可以入队和出队操作)double ended queue
限制Deque只能从一端出入,则可实现 栈(Stack)
相关文章推荐
- RE:JAVA学习-日期操作+步入集合
- RE:JAVA学习-线程及线程池操作
- MongoDB学习日记 - java代码(三):数据库与集合操作
- java.util.ConcurrentModificationException的解决办法 大家应该都知道, 在java中, 在对一些集合迭代的过程中对集合进行一些修改的操作, 比如说add,re
- JAVAWEB开发之redis学习(四)——Set集合相关的操作命令
- JAVAWEB开发之redis学习(六)——HashSet集合相关的操作命令
- java学习 jstl循环标签展示List集合操作
- JAVAWEB开发之redis学习(五)——SortedSet集合相关的操作命令
- RE:JAVA学习-文件操作-File
- java io 操作集合
- Linq 学习(5) 集合操作
- 看MSSQL的执行计划,学习集合操作
- JAVA学习提高之----JAVA EXCEL API及JAVA 操作Excel(一)
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性之集合)
- 2009-05-27技术学习:Java中对XML文档的操作
- JAVA学习提高之----JAVA开源项目之操作csv文件
- Java中的集合类学习笔记
- Linq 学习(5) 集合操作
- Java容器集合学习心得
- Java中集合类学习笔记