1.今天学习了2个小时java,在力扣上刷了一道题目,在java上学习的内容主要是对于明天要讲的集合和泛型的内容。
1.对于泛型来说,他的意义就在于编写模板代码来适应任意类型,使用时不必对类型进行强制转换,通过编译器对类型进行检查,从而进行相对应的类型的操作。
// 创建可以存储String的ArrayList:
ArrayList<String> strList = new ArrayList<String>();
// 创建可以存储Float的ArrayList:
ArrayList<Float> floatList = new ArrayList<Float>();
// 创建可以存储Person的ArrayList:
ArrayList<Person> personList = new ArrayList<Person>();
上面的代码就是利用泛型,来创建任何你想要创建的ArrayList。
而对于编译器的检查环节就是下面这个代码
ArrayList<String> strList = new ArrayList<String>();
strList.add("hello"); // OK
String s = strList.get(0); // OK
strList.add(new Integer(123)); // compile error!
Integer n = strList.get(0); // compile error!
我创建了一个strList,并将他定义为string类型,对于下面这两个操作时就会进行报错。
strList.add(new Integer(123)); // compile error!
Integer n = strList.get(0); // compile error!
2.对于集合来说,正如这个名字一般,集合就是一些元素组合成的一种东西,最简单的集合就是数组,然后还可以建立各种你想要的有特殊限制的集合,例如
可变大小的顺序链表;保证无重复元素的集合;
这些都是可以建立的集合
然后对于可变大小的顺序链表,java提供的比较常用的接口方法就是ArrayList
ArrayList一些主要的接口方法:
- 在末尾添加一个元素:
boolean add(E e)
- 在指定索引添加一个元素:
boolean add(int index, E e)
- 删除指定索引的元素:
E remove(int index)
- 删除某个元素:
boolean remove(Object e)
- 获取指定索引的元素:
E get(int index)
- 获取链表大小(包含元素的个数):
int size();
这些就是我今天学习的一些关于java的知识。
2.题目方面
上面的就是题目内容,我使用的方法是利用map来记录每个元素的出现次数在第二次遍历时找到次数为一的元素就将return他的位置,如果没有找到就return -1;
代码如下
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<int, int> a;
for (char c: s) {
a[c]++;
}
for (int i = 0; i < s.size(); i++) {
if (a[s[i]] == 1) {
return i;
}
}
return -1;
}
};
今天的学习总结就到这里了。