Java第十四章 之 List、Set

  1 /*
  2 
  3 List接口:元素存储有序、带有索引、可以重复元素的集合
  4 
  5              常用子类有ArrayList、LinkedList
  6 
  7              add(Object obj) 向集合末尾处添加指定元素
  8 
  9              add(int index , Object obj)向集合指定索引处添加元素,原有元素依次后移
 10 
 11  
 12 
 13              remove(Object obj) 将指定元素对象,从集合中删除,返回值为被删除的元素
 14 
 15              remove(int index) 将指定索引处的元素,从集合中删除,返回值为被删除的元素
 16 
 17  
 18 
 19              set(int index , Object o) 将指定索引处的元素,替换成指定元素,返回值为替换前的元素
 20 
 21  
 22 
 23              get(int index) 获取指定索引处的元素,并返回该元素
 24 
 25 ArrayList是数组结构,元素查询快,增删慢
 26 
 27 LinkedList是链表结构,元素查询慢,增删快
 28 
 29 void addFirst(E e)将指定元素插入此列表的开头
 30 
 31 void addList(E e)将指定元素插入此列表的末尾
 32 
 33 E getFirst()返回此列表的第一个元素
 34 
 35 E getLast()返回此列表的最后一个元素
 36 
 37 E removeFirst() 移除并返回此列表的第一个元素
 38 
 39 E removeLast() 移除并返回此列表的最后一个元素
 40 
 41 E pop()从列表所表示的堆栈处弹出一个元素
 42 
 43 void push(E e) 将元素推入此列表所表示的堆栈
 44 
 45 boolean isEmpty()如果列表不包含元素,则返回true
 46 
 47 */
 48 
 49 public class listDemo{
 50 
 51      public static void main(String[] args){
 52 
 53         List<String>  list = new ArrayList<String>();
 54 
 55         list.add("张三“);
 56 
 57         list.add("李四");
 58 
 59         list.add("王五");
 60 
 61         list.add(1 , "马五");
 62 
 63         list.remove(2);
 64 
 65         list.set(1,"马四");
 66 
 67         for(int i = 0 ; i < list.size() ; i++){
 68 
 69              String str = list.get(i);
 70 
 71         System.out.println(str);
 72 
 73         }
 74 
 75     }
 76 
 77 }
 78 
 79  
 80 
 81 /*
 82 
 83 Set接口:元素不可重复,通过元素的equals方法,来判断是否为重复元素
 84 
 85 HashSet(实际上是一个HashMap集合),HashSet集合不能保证迭代顺序与元素存储顺序相同
 86 
 87 HashSet采用哈希表结构存储数据,保证元素唯一性的方式依赖于hashCode()与equals()方法
 88 
 89 HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equalsf方法,这两个方法已经在JavaAPI每个类中重写
 90 
 91 HashSet中存储自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中对象的唯一
 92 
 93 LinkedHashSet链表和哈希表组合的一个的数据存储结构,保证元素的存入和取出的顺序
 94 
 95 */
 96 
 97 public class SetDemo{
 98 
 99      public static void main(String[] args){
100 
101           HashSet<String> hs = new HashSet<String>();
102 
103           hs.add("张三");
104 
105           hs.add("李四");
106 
107           Iterator it = set.iterator();
108 
109           while(it.hasNext()){
110 
111                   Strign s = it.next();
112 
113               System.out.println(s);
114 
115           }
116 
117      }
118 
119 }
120 
121 public class Student{
122 
123     private String name;
124 
125     private int age;
126 
127     public Student(){
128 
129     }
130 
131     public Student(String name , int age){
132 
133        super();
134 
135        this.name = name;
136 
137        this.age = age;
138 
139     } 
140 
141     public void setName(String name){
142 
143          this.name = name;
144 
145     }
146 
147    public String getName(){
148 
149        return name;
150 
151    }
152 
153    public void setAge(int age){
154 
155       this.age = age;
156 
157    }
158 
159    public int getAge(){
160 
161       this.age = age;
162 
163    }
164 
165 @Override
166       public int hashCode() {
167          final int prime = 31;
168          int result = 1;
169          result = prime * result + age;
170          result = prime * result + ((name == null) ? 0 : name.hashCode());
171          return result;
172 
173       }
174 
175 @Override
176 public boolean equals(Object obj) {
177   if (this == obj)
178   return true;
179   if (obj == null)
180   return false;
181   if (getClass() != obj.getClass())
182   return false;
183   Student other = (Student) obj;
184   if (age != other.age)
185   return false;
186   if (name == null) {
187   if (other.name != null)
188   return false;
189   } else if (!name.equals(other.name))
190     return false;
191     return true;
192   }
193    @Override
194    public String toString() {
195        return "Student [name=" + name + ", age=" + age + "]";
196      }
197 
198 }
199 
200 public static void main(String[] args) {
201       HashSet<Student>  hs = new HashSet<Student>();
202           hs.add(new Student("张三" , 20));
203           hs.add(new Student("李四" , 20));
204           hs.add(new Student("王五" , 20));
205 
206       for(Student st : hs){
207 
208           Syste.out.println(st.getName() +" "+ st.getAge());
209 
210       }
211 
212 /*
213 
214 ArrayList :  boolean contains(Object obj)如果此列表中包含指定的元素,则返回true
215 
216                   传入的元素的equals方法依次与集合中的旧元素比较,根据返回的布尔值判断是否有重复的元素,存放自定义类型时,由于自定义类型未重写equals方法,判断是否重复的依据是地址值,想判断内容是否有重复的元素,需要重写equals方法
217 
218 HashSet : boolean add(E e)如果此set中没有包含指定元素,则添加指定元素
219 
220                  boolean contains(Object o) 如果此set中包含指定元素,则返回true
221 
222                  添加方法在添加时会判断是否有重复元素,有重复不添加,没重复则添加
223 
224                  由于是无序的,判断唯一的依据是元素类型的hashCode与equals方法的返回结果:
225 
226                  先判断新元素和集合中的旧元素的hashCode值:
227 
228                  如果不同,说明是不同元素,添加到集合
229 
230                   如果相同,再判断equals比较结果,返回true则相同元素,返回false则不同元素,添加到集合
231 
232                   存储自定义类型,如果没有重写该类的hashCode与equals方法时,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写hashCode与equals方法
233 
234 */

 

posted @ 2020-04-10 14:29  蜡笔辛巴  阅读(228)  评论(0编辑  收藏  举报