1、フレームセット(はじめに、回収方法、イテレータ)
クリップに対応するクレーン機、取り出し容器の工具要素、収集容器は、非常に特定の方法であり、イテレータ
「インタビューの質問。収集するためのメソッドを削除して、違いは何イテレータのメソッドを削除しますか?
イテレータやforeachループが頻繁に質問しがちなものを削除する1.(FAQは!!!)
境界例外添字う
問題は何に注意を払うようにcollection.removeメソッドを実行しますイテレータでは2をutil.concurrentModificationException
自然から来ます彼は言った:並行性の問題、(例として、クレーン機)
コード:
package com.wxm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/** * collection中特别的方法 * iterator迭代器 * * * * 集合的remove和迭代器的remove有什么区别 * @author wxm * */
public class CollectionDemo {
public static void main(String[] args) {
Collection c= new ArrayList();
c.add(22);
c.add(23);
c.add(34);
c.add(35);
c.add(48); //
//fore//
for (Object object : c) {4//
System.out.println(object);
// } //迭代器是集合的特有方法 it.next()下一个
Iterator it=c.iterator();
while(it.hasNext()) {
//System.out.println(it.next());
int num=(int) it.next();
if(num%2==0) {
System.out.println(num); //System.out.println(it.next());
}
}
}
}
図2に示すように、フレームリストの集合(ArrayListの特定の方法、特定のイテレータ、オブジェクト固有の特性は、成長因子を示しました)
そのような容器は、添え字があることを、下記の基準に従って拾うことができる、等...の方法は、コンテナの要素の動作を削除するために見ることができる
「顔差分2.1arraylist(CRUDの態様、構造)を有する2つの質問。LinkedListのを
ArrayListのリスト構造速い、遅いクエリなしの連続添字へ1.5 10のLinkedListの追加および削除のアレイ構成の削除が遅い、速い連続問合せインデックススレッドが同期されていない成長因子
```
package com.wxm; import java.util.ArrayList;
import java.util.Collection;import java.util.List;import java.util.ListIterator;
/* * list中的listIterator * * * */
public class ListDemo {
public static void main(String[] args) {
List c= new ArrayList();
c.add(22);
c.add(23);
c.add(34);
c.add(35);
c.add(48);
ListIterator it=c.listIterator();
while(it.hasPrevious()) {//
System.out.println(it.previous());
}
System.out.println("---");
}
}~
```
2.2 ArrayListのリストとの間の差
変数1.listの長さは、固定長配列
2.listは、要素オブジェクトのすべての種類を格納することができ、および文の配列のみ、対応するタイプを格納することができる
2.3arraylist方法に同調(成長因子)
なぜ根本的な構造を設定し、リストには、配列が、配列の長さと固定されており、どのようにリストの長さを変更することですか?(引数)〜
package com.wxm; import java.lang.reflect.Field;import java.util.ArrayList;
/** * 面试题: * arraylist与array的区别 *
1.list长度可变,数组长度固定、
2.list可以存放各类元素对象,对象一旦声明类型,就不能便 *
* arraylist如何调优 * 增长因子,来实现优化性能 *
* @author wxm * */
* public class ListDemo2 {
* public static void main(String[] args) {
* ArrayList al=new ArrayList<>();
* for(int i=1;i<=80;i++) {
* al.add(i);
* System.out.println(i+",");
* getlength(al);
* }
* }
* public static void getlength(ArrayList al) {
* try {
* Field f=al.getClass().getDeclaredField("elementData");
* f.setAccessible(true);
* Object obj=f.get(al);
* Object [] elementData=(Object[]) obj;
* System.out.println("当前al容器的底层数组的长度:"+elementData.length); } catch (Exception e) {
* e.printStackTrace();
* }
* }}~
図3に示すように、フレームセットのLinkedList
アナログキューリンクリストデータ構造およびスタック:弾丸クリップの最後のアウトキュー:FIFOパイプ
package com.wxm; import java.util.Iterator;import java.util.LinkedList;
/** * 面试题:
* 通过linkedlist集合来制作一个堆栈结构的容器 * *
* 模拟一个队列结构的容器 */
*public class LinkedListDemo {
public static void main(String[] args) {
Duilie dl=new Duilie();
dl.push("a");
dl.push("b");
dl.push("c");
dl.push("c");
dl.push("d");
dl.push("e");
dl.bianLi();
}
}
/* * 堆栈结构的容器 * */
class Duilie{
private LinkedList ll=new LinkedList<>();
/* * 往堆栈容器添加元素 * * */
public void push (Object obj) {
ll.addLast(obj);
}
public Object pop() {
return ll.removeFirst();
}
public void bianLi() {//
for (int i = 0; i < ll.size(); i++) {//
System.out.println(this.pop());// } Iterator it=ll.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}~
5、ヘビーにその基本原理の要素を繰り返しフレームのArrayListのセット
同じである、方法が要素に基づいてリスト要素のセットを分析することは〜に等しい
列に格納された重みリストに文字列を、文字列は、文字列である基準値重複除外データ型より法に等しい(同じ年齢の同じビューの名前同じ人)
のアイデア-
1、人の説明は、データがコンテナにオブジェクト2、オブジェクト3にカプセル化される、を再参照データ型は〜検証方法に等しいと呼ばれています
package com.wxm; import java.util.ArrayList;
/** * * 对arrayList中的元素去重
1.元素为字符串 2.元素是自定义对象 * *
*
需求:
* 判定两个人是同一个人的依据;
* 名字相同年龄相同 *
@author wxm
*集合collection的contains在调用的时候底层调用容器元素对象的equals方法 * *之前元素对象是String *元素对象是obj(person) */
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList al=new ArrayList<>();//
al.add("wangting");//
al.add("zhuangyuan");
// al.add("xiang");
// al.add("runchen");
// al.add("xiang");
System.out.println("无去重复"+al.size());
// ArrayList newal= repeat(al);
// System.out.println("去重复后"+newal.size());
al.add(new Person("wangting5", 12));
al.add(new Person("wangting1", 12));
al.add(new Person("wangting2", 12));
al.add(new Person("wangting3", 12));
al.add(new Person("wangting1", 12));
System.out.println(al.size());
}
/** * * ArrayList 怎么去重复 *
* 思路:
* 1.建立一个新容器, *
2。将老的容器遍历取出其中的元素 *
3.如果这个元素存在于新容器中,那么不再往新容器加入。如果不存在,就加 */
public static ArrayList repeat(ArrayList al) {
ArrayList newAl =new ArrayList<>();
for(Object obj:al) {
if(!newAl.contains(obj)) {
newAl.add(obj);
}
}
return newAl;
}
}
cclass Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name; }
public int getAge() {
return age; }
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]"; }
public Person(String name, int age) {
super();
this.name = name;
this.age = age; }
public Person() { super(); }
@Override
public boolean equals(Object obj) {
Person p=(Person) obj;
System.out.println(p.name+"--equals--"+this.name);
return p.name.equals(this.name) && p.age==this.age; }}~