Java高級特性 集合

數據結構:計算機中用來存儲或者管理數據的方式數組

鏈表底層實現的代碼:安全

package demo3.lianxi1;數據結構

public class MyLink {
private int data;//存儲鏈表的值
private MyLink next;//指針指向下一個數據

public MyLink(int i) {
data=i;
}
//向鏈表中拼接值
private void append(MyLink myLink) {
MyLink s=this;
while(s.next!=null){
s=s.next;
}
s.next=myLink;
}
//向鏈表中增長值,每當增長一個值,都在第一個值的後面
private void add(MyLink myLink) {
myLink.next=next;
next=myLink;
}
//把鏈表中的數據顯示出來
private void show() {
MyLink s = this;
while (s != null) {
System.out.println(s.data);
s = s.next;
}
}
public static void main(String[] args) {
MyLink link=new MyLink(1);
link.append(new MyLink(10));
link.append(new MyLink(20));
link.append(new MyLink(30));
link.add(new MyLink(3));
link.show();
app

}框架

數組的特色:ide

     1.長度一旦被定義,就不容許被改變工具

     2.在內存中開闢連續的空間性能

     3.便於查詢,可是插入和刪除麻煩this

例子:spa

   若是咱們建立一個容量爲30的數組,用來存儲學生信息

   1.一個班的學生若是不夠30,形成資源浪費

   2.一個班的學生若是大於30,內存不夠

集合框架:  父接口Collection

Collections一些方法來操做集合類

 Collections 全部集合類的工具類

 @test

public void test01{

 List<String> list=new ArrayList<>();

 list.add("z");

 list.add("a");

 list.add("v");

 list.add("b");

 System.out.println("沒有排序"+list);

 //1.升序--->sort

 Collections.sort(list);

 System.out.println("升序"+list);

//2.降序-->reverse

Collections.reverse(list);

System.out.println("降序"+list);

//3.查詢某個元素在集合中的位置,必須先升序排序-->binarySearch

 Collections.sort(list);

 int index=Collections.binarySearch(list,"z");

 System.out.println("元素z存在的位置是:"+index);

//4.隨機排序---->shuffle

 Collections.shuffle(list);

System.out.println("隨機排序"+list);

}

實現對對象的排序   只有實現Comparable接口的類才能被排序

 

//只有實現Comparable接口的類 才能被 排序!
public class Student implements Comparable {

private int id; // 學生編號
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Student() {
super();
}

@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}

public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}

// 按照本身的規則 去進行 排序
@Override
public int compareTo(Object o) {
if (o instanceof Student) {
Student stu = (Student) o;
if (stu.getId() == this.id) {
return 0;
} else if (stu.getId() < this.id) {
return -1;//降序
} else {
return 1;
}
} else {
return 0;
}
}

}

@test

 

public void test02{

List<Student> list=new ArrayList<>();

 list.add(new Student(50,"小黑50"));

 list.add(new Student(10,"小黑10"));

 list.add(new Student(80,"小黑80"));

 list.add(new Student(20,"小黑20"));

 list.add(new Student(60,"小黑60"));

Collections.sort(list);

 for(Student student:list){

 System.out.println(student);

 } 

 

 

}

 


 把數組轉換成集合

@Test
public void test03() {
String[] words = { "a", "b", "c", "d" };
List<String> list = Arrays.asList(words);
Collections.rotate(list, 2);//後移兩位,把後面的兩位移到前面
System.out.println(list);
}

 


中文排序

@Test
public void test04() {
List<String> list = new ArrayList();
list.add("啊");
list.add("在");
list.add("把");
list.add("好");
list.add("是");
Comparator<Object> c = Collator.getInstance(Locale.CHINA);
Collections.sort(list, c);
for (String s : list) {
System.out.println(s);
}
}

數組和...的區別以及用法

/**
* 01.能夠傳遞0 或者 N個 int類型的數據
* 02.怎麼操做數組 怎麼操做...
* 03.必須位於參數列表中的最後一個位置
*/
public static void main(String[] args) {
String[] sales = { "啤酒", "飲料", "礦泉水" };
slaeSometing("小粉");
}

/**
* @param name 誰 在 出售 什麼 東西
* @param something 出售的東西
*/
private static void slaeSometing(String name, String... something) {
System.out.println(name + "在出售");

for (int i = 0; i < something.length; i++) {
System.out.print(something[i] + ",");
}
}

 

     public interface List<E> extends Collection<E>

     public interface Set<E> extends Collection<E>

     public interface Map<k.v>

    Vector  線程安全,可是性能低

    List接口經常使用的實現類  

     存儲的都是不惟一(能夠重複),有序(插入順序)的數據   

 

       ArrayList底層就是一個動態數組,自動擴容

          List lis=new ArrayList();

 

public ArrayList() {
this.elementData = EMPTY_ELEMENTDATA;
}

private static final Object[] EMPTY_ELEMENTDATA = {};
private transient Object[] elementData;

       

          咱們在執行add();的時候,底層默認初始化了一個長度爲10的數組,能夠自動擴容1.5           倍

           Object[] elementData=new  Object[10];

         s.size();集合中元素的個數

         s.add();

         s.add(0,"");

         s.remove();

         s.remove(1,"");

         新增和刪除的效率低,遍歷效率快

       LinkedList底層就是一個鏈表,有本身特有而父類沒有的方法

        有單鏈表和雙鏈表(含有前驅和後繼)之分

         LinkdeList lis=new LinkedList();

         新增和刪除的效率高,查詢效率低

    Set接口經常使用的實現類  散列表 Hash 以空間換時間

      存儲的都是惟一(不能夠重複),無序的數據   

               HashSet

         HashSet set = new HashSet();

         1.add新增數據

         2.實際上是使用了map.put(key,value)

         3.map.put(key,value)決定了key是惟一的

      兩個數據內容一致,Hash值確定一致

      Hash值一致,數據內容不必定相同

      比較步驟:1.比較Hash,

                 2.比較內存地址,

                 3.equals比較內容

    TreeSet  自帶排序 樹型結構

      只有實現Comparable接口的類才能被排序

    Map  單獨的接口

     keySet:全部key的集合

    HashMap 

    //使用for增強 遍歷keySet

    Set<String> keySet=map.keySet();

    for (String key : keySet) {

         System.out.print(key+" ");

     }

//使用Iterator遍歷

Set<String> keySet=map.keySet();

Iterator<String> iterator = keySet.iterator();//獲取迭代器對象

while(iterator.hasNext()){//證實集合中存在數據

String key = iterator.next();

//根據key獲取value

String value=(String) map.get(key);

System.out.print(key+" "+value+" ");

}

//entry   Set<Map.Entry<k.v>> entrySet()

 

Set<Entry<String, Object>> entrySet = map.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while(iterator.hasNext()){//證實集合中存在數據
Entry<String, Object> entry = iterator.next();
System.out.println(entry.getKey()+"-------"+entry.getValue());
}

HashMap與HashTable的區別:

1.HashMap線程不安全,可是性能高

   HashTable線程安全,可是性能低

2.HashTable從1.0的版本就開始使用

   HashMap從1.2的版本就開始使用

3.HashMap底層就是Hash表來實現的  key和value均可以是null

   HashTablekey和value不能夠爲null   

Hashtable<String,String> table=new Hashtable<>();
table.put(null, null);//運行時異常

 

全部的集合中都有一個Iterator接口,用來遍歷集合中的數據,返回Iterator迭代器

   在Iterator接口中有三個方法:

    1.hasNext()  判斷集合中是否存在下一個元素,返回boolean類型

    2.next()     獲取集合中的下一個元素

    3.remove()   刪除元素

    

    TreeMap

泛型集合:在建立集合的時候,規定了集合中能存放的數據類型

List<String> lis=new ArrayList<String>(); 

相關文章
相關標籤/搜索