What I meant was that before I start learning something like SFML, should I learn how to use a windowing library (Pardon me if that is not the correct term)?
Garbage collection is something I seen in other post that must be done although I have no idea of how it works.
Garbage collection in C++ doesn't exist, instead there's RAII, which is a
sort of garbage collection (works kind like it, but it certainly is not), but much faster and depending on the usage of C++ 11 (current approach) or an external library (boost, as it was done before C++ 11). C++ 11 is the new standard btw, as it's new you may not find as much of it as common C++ in the web, so learn the older standard first and then learn what's new in C++ 11.
There's no real need to learn to use a GUI (AKA windowing library) to know SFML, but it is something good to know. I'd suggest you start with console applications, mainly by the use of simple logic and lots of std::cout to get into the language. C++ unlike java hasn't a native GUI library.
The list of what to learn is HUGE, there's classes, destructors, memory management (very linked to destructors, pointers and references), templates, operators (you can program your own), c++ style inheritance and polymorphism (multiple inheritance as a posibility, the concept of a vtable if you will), preprocessor, structs, unions , enums. Even the use of const (java's final) and unsigned types, as the former doesn't work well in java and the latter ones don't even exist.
The way c++ compiles is via two files and not just one, a header (.h/.hpp) and a source file (.cpp). You declare everything in the header and you implement it in the source file. This difference can cause a huge confusion if seen from a bad angle. And most of my pain in starting with C++ was to get used to that notation.
Strings not being a primitive type can be quite a shock as well, since the native strings in C/C++ are char*.
To use strings in a friendly way there's std::string.
Note that that was the summarized list and there's much more to add.
Try to learn from scratch, you surely know OOP and many more things, but to get used to the language there's no choice but that, mainly because you need to handle many things that you don't control in java, in exchange you get better performances.
By collection of data I mean vectors.
I thought I had to do memory management myself, which I guess in a way I do, but the other post and your own have answered this.
Yes and no, while it's good to know how a std::array or std::vector work inside, you can perfectly use them without knowing what they are beneath. However it's highly recommended that you implement your own structures first.
Just as a side note: the out of bounds error is non-existent in c++ and if you are not careful you may end up with a SIGSEV error in run-time (doesn't exist in java I think).
Check this:
http://www.cplusplus.com/reference/stl/It will be your best friend for long time.
And well, there isn't an exact guide of what to learn first, just a whole bunch of things to learn.