RE:JAVA学习-集合操作
来源:互联网 发布:卖汉服的淘宝店 编辑:程序博客网 时间:2024/06/06 12:28
1.Iterator:迭代器
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) { Collection 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学习-日期操作+步入集合
- RE:JAVA学习-文件操作-File
- RE:JAVA学习-线程及线程池操作
- RE:JAVA学习-基本IO操作及文本数据IO操作
- RE:JAVA学习-方法调用
- RE:JAVA学习-步入抽象
- RE:JAVA学习-步入String
- RE:JAVA学习-HashMap用法
- RE:JAVA学习-了解线程
- RE:0 JAVA学习----(一) 对象
- RE:JAVA学习-变量,基本数据类型,Scanner
- RE:JAVA学习-初入循环
- RE:JAVA学习-循环应用和数组
- RE:JAVA学习-初访 对象与类
- RE:JAVA学习-深入继承+访问控制
- java学习 jstl循环标签展示List集合操作
- java io 操作集合
- Dipping into Shared Memory
- Super Jumping! Jumping! Jumping! hdu1087
- 最长回文
- 51nod 1821 最优集合 并查集 || 栈
- Unity中OnCollisionStay2D的使用
- RE:JAVA学习-集合操作
- 剑指Offer—23—二叉搜索树的后序遍历序列
- 2017.08.23总结
- 回归计划-序
- mac上的几个键⌘——Command ⌃ ——Control是向上的尖括号⌃ ——option Z字加一杠⇧——Shift
- 多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE)
- 深度解析链表操作
- HDU-5072 Coprime(容斥原理,同色三角形)
- Java开发中的23种设计模式详解(转)